为什么我的 VB 程序抛出异常,抱怨 OleDbDataReader 已关闭,而它绝对应该打开?

Why is my VB program throwing an exception complaining that a OleDbDataReader is closed, when it should absolutely be open?

我正在尝试使用 OleDB 和 SQLBulkCopy 将数据从 excel 传播sheet 提取到 SQL 数据库中。当我尝试 运行 我的代码时,我得到以下异常,由 "bulkCopy.WriteToServer(objDR)"(问题标题中也有描述):exception data

OleDB 成功读取 excel sheet,然后在我为调试目的在 WinForm 中创建的 DataGridView 中正确填充它。

下面是相关代码的片段。

Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\damon\Everyone\sheet1erictest.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
    ExcelConnection.Open()
    Dim sheet As String = "Sheet5$"
    Dim expr As String = "SELECT * FROM [" + sheet + "]"

    Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, ExcelConnection)
    Dim objDR As OleDbDataReader

    Dim SQLconn As New SqlConnection()
    Dim ConnString As String = "SERVER=SqlDEV;DATABASE=Freight;Integrated Security=True"
    SQLconn.ConnectionString = ConnString
    SQLconn.Open()


    Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLconn)
        bulkCopy.DestinationTableName = "dbo.test"

        Try

            objDR = objCmdSelect.ExecuteReader

            Dim dt = New DataTable()
            dt.Load(objDR)
            DataGridView1.AutoGenerateColumns = True
            DataGridView1.DataSource = dt
            DataGridView1.Refresh()
            bulkCopy.WriteToServer(objDR)

            objDR.Close()
            SQLconn.Close()

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Using
End Sub

DataTable 正在使用您的 reader 对象,因此请注释掉这些行并 运行 稍后使用新实例将它们分开:

objDR = objCmdSelect.ExecuteReader

'Dim dt = New DataTable()
'dt.Load(objDR)
'DataGridView1.AutoGenerateColumns = True
'DataGridView1.DataSource = dt
'DataGridView1.Refresh()
bulkCopy.WriteToServer(objDR)