DOBON.NETプログラミング道掲示板

24時間以内に投稿された新着記事


■35632 / )  Re[1]: oledbでdatatableを取得するときにエラーになる
□投稿者/ 末長 邦明 一般人(2回)-(2024/11/08(Fri) 15:16:23)
  • アイコンありがとうございます。
    マクロファイル(.xlsm)を開こうとしてエラーになっていました。
    通常のExcelファイル(.xlsx)に変更したところ、releaseモードでも正常に動作しました。

解決み!
違反を報告
返信 削除キー/

■35631 / )  oledbでdatatableを取得するときにエラーになる
□投稿者/ 末長 邦明 一般人(1回)-(2024/11/08(Fri) 14:00:33)
  • アイコン環境/言語:[windows11/vb.net] 
    分類:[.NET] 

    yahoo知恵袋にマルチポストしています。
    vb.net(VS2022)で
    oledbでdatatableを取得するときのエラーについて質問です。
    下記ソースでテストを行っていますが、
    ' データを取得する
    da.Fill(excelToDt)
    のところで、「引数が無効です」となってしまいます。
    debugモードでは、正常に動作します。
    どのように対応すればよろしいでしょうか?
    よろしくお願い申し上げます。

    Public Function excelToDt(ByVal p_fileNm As String, Optional ByVal p_sheetNm As String = "Sheet1") As DataTable

    Dim con As New OleDbConnection()
    Dim cmd As New OleDbCommand()
    Dim da As New OleDbDataAdapter()
    Dim FileName As String = Path.GetFileName(p_fileNm)
    Try

    excelToDt = New System.Data.DataTable()

    con.ConnectionString =
    "Provider=Microsoft.ACE.OLEDB.12.0; " &
    "Data Source=" & p_fileNm & ";" & "Extended Properties=""Excel 12.0;HDR=YES;"""
    ' コネクションの設定
    cmd.Connection = con

    ' SQL文の設定
    cmd.CommandText = "SELECT * FROM [" & p_sheetNm & "$] "

    ' SELECTコマンドの設定
    da.SelectCommand = cmd

    ' データを取得する
    da.Fill(excelToDt)

    Catch ex As Exception
    Throw
    Finally
    con.Dispose()
    cmd.Dispose()
    da.Dispose()
    End Try

    End Function
    ----------------------------------------
    internal OleDbConnectionInternal(OleDbConnectionString constr, OleDbConnection connection)
    {
    ConnectionString = constr;
    if (constr.PossiblePrompt && !Environment.UserInteractive)
    {
    throw ODB.PossiblePromptNotUserInteractive();
    }
    try
    {
    OleDbServicesWrapper objectPool = GetObjectPool();
    _datasrcwrp = new DataSourceWrapper();
    objectPool.GetDataSource(constr, ref _datasrcwrp);
    if (connection != null)
    {
    _sessionwrp = new SessionWrapper();
    OleDbHResult oleDbHResult = _datasrcwrp.InitializeAndCreateSession(constr, ref _sessionwrp);
    if (OleDbHResult.S_OK > oleDbHResult || _sessionwrp.IsInvalid)
    {
    Exception ex = OleDbConnection.ProcessResults(oleDbHResult, null, null);
    throw ex;
    }
    OleDbConnection.ProcessResults(oleDbHResult, connection, connection);
    }
    }
    catch
    {
    if (_sessionwrp != null)
    {
    _sessionwrp.Dispose();
    _sessionwrp = null;
    }
    if (_datasrcwrp != null)
    {
    _datasrcwrp.Dispose();
    _datasrcwrp = null;
    }
    throw; ←ここでエラーになります
    }
    }

違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -