首页 > 解决方案 > 'System.Data.OleDb.OleDbConnection' 类型的值无法在 oledb 中的 vb.net 中转换为 'System.Data.OleDb.OleDbCommand'

问题描述

我正在尝试运行此命令

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;

但我收到一个错误

“内部:无法执行代码阶段,因为代码阶段引发了异常:填充:SelectCommand.Connection 属性尚未初始化”

Dim oComm As New OleDbCommand 

        Dim oledbAdapter As new OleDbDataAdapter(SQL,moconnection)

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

但我希望 Command 应该由该代码执行

标签: vb.netoledb

解决方案


我不确定加入,我无法测试它。对于 Excel,.xlsx 文件是数据库,每个工作表都是一个表。我希望 Sheet1 和 Orders 都在同一个文件中。如果不是,您将需要使用 2 个连接和一个可以保存两个可以建立关系的 DataTables 的 DataSet 以不同的方式处理此问题。

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

推荐阅读