首页 > 解决方案 > MyCommand.Fill(DtSet) 不起作用。为什么?

问题描述

我正在尝试使用 OleDb 填充数据集,但它似乎不起作用。我从一个网站获得了代码,对 Connection 知之甚少。我在 VB.NET (2010) 和 Excel 2016 中编程。代码的作用:它使用 OLEDB 在 Excel 文件中插入单元格数据。

我在 VB.NET (2010) 中编程,并稍微修改了代码以满足我的需要。

这是完整的代码:

Private Sub AdxRibbonButton16_OnClick(ByVal sender As System.Object, _
   ByVal control As AddinExpress.MSO.IRibbonControl, _
   ByVal pressed As System.Boolean) _
   Handles AdxRibbonButton16.OnClick

        Try

            Dim MyConnection As System.Data.OleDb.OleDbConnection

            Dim DtSet As System.Data.DataSet

            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter

            Dim DataGridView1 As New DataGridView

            MyConnection = New System.Data.OleDb.OleDbConnection _
            ("provider=Microsoft.ACE.OLEDB.12.0; Data Source='F:\testfile.xlsx'; Extended Properties=Excel 12.0;")

            MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)

            MyCommand.TableMappings.Add("Table", "TestTable")

            DtSet = New System.Data.DataSet

            MyCommand.Fill(DtSet)  '// seems problem is here

            DataGridView1.DataSource = DtSet.Tables(0)

            MyConnection.Close()

        Catch ex As Exception
            MsgBox(ex.ToString)

        End Try

    End Sub

预期结果:应将 Excel 文件的内容发送到 DataGrid。

实际结果:什么都没有发生

错误消息:没有错误消息。当我点击我的按钮时,什么也没有发生。

标签: excelvb.netoledbconnection

解决方案


在设计时添加 DataGridView1。我使用 DataTable 而不是 DataSet 和 Command 而不是 DataAdapter 稍微简化了一些事情。即使出现错误,Using 块也将确保关闭和处置数据库对象。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt As New DataTable
    Using MyConnection As New OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0; Data Source='F:\testfile.xlsx'; Extended Properties=Excel 12.0;")
        Using MyCommand As New OleDbCommand("select * from [Sheet1$]", MyConnection)
            MyConnection.Open()
            dt.Load(MyCommand.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub

推荐阅读