Значение типа «System.Data.OleDb.OleDbConnection» не может быть преобразовано в «System.Data.OleDb.OleDbCommand» в vb.net в oledb - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь выполнить эту команду

SELECT * 
FROM [Sheet1$] AS A INNER JOIN [Orders$] IN'C:\Users\reddy\Desktop\Orders.xlsx' 'Excel 8.0;'
AS B
ON A.ContactName = B.ContactName;

, но получаю ошибку

"Внутренняя: не удалось выполнить этап кода, так как исключение выдается этапом кода:Fill: свойство SelectCommand.Connection не было инициализировано "

Dim oComm As New OleDbCommand 

        Dim oledbAdapter As new OleDbDataAdapter(SQL,moconnection)

        Dim oDataSet As New DataSet
                oledbAdapter.Fill(oDataSet)
                oledbAdapter.Dispose()

Но я ожидал, что команда должна выполняться по этому коду

1 Ответ

0 голосов
/ 28 мая 2019

Я не уверен насчет соединения и не могу его проверить. Что касается Excel, файл .xlsx является базой данных, а каждый лист - таблицей. Я надеюсь, что Sheet1 и Orders находятся в одном файле. Если нет, вам нужно будет по-другому подходить к этому с двумя соединениями и набором данных, который может содержать обе таблицы данных, где могут быть установлены отношения.

Private Sub OPCode()
    Dim dt As New DataTable
    Dim strFileName As String = "C:\Users\reddy\Desktop\Orders.xlsx"
    Dim strCon As String = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={strFileName};Extended Properties=""Excel 12.0;HDR=YES;"""
    Using cn = New OleDbConnection(strCon)
        Dim sql = "Select * FROM [Sheet1$] As A INNER JOIN [Orders$] AS B On A.ContactName = B.ContactName;"
        Using cmd As New OleDbCommand(sql, cn)
            cn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub
...