首页 > 解决方案 > 使用 Backgroundworker 从 MSAccess 数据库中的 Datagridview.rows.add 出错

问题描述

Private Sub bw_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bw.DoWork
    SampleOnly(dgvProductList)
End Sub

Sub SampleOnly(ByVal dgv As DataGridView)
    Try
        If dgv.InvokeRequired Then
            dgv.Invoke(Sub() dgv.Rows.Clear())
        Else
            dgv.Rows.Clear()
        End If

        Dim i As Integer
        If cn.State = ConnectionState.Closed Then
            cn.Open()
        End If
        Dim cmd As New OleDbCommand("select ProductID,Barcode,AKA,ProductName,Principal,CPrice,PPrice,Quantity from Product", cn)
        dr = cmd.ExecuteReader
        While dr.Read
            i += 1
            If dgv.InvokeRequired Then
                dgv.Invoke(Sub()
                               dgvProductList.Rows.Add(i, dr.Item("ProductID").ToString, dr.Item("Barcode").ToString, dr.Item("AKA").ToString, dr.Item("ProductName").ToString, dr.Item("Principal").ToString, dr.Item("CPrice").ToString, dr.Item("PPrice").ToString, dr.Item("Quantity").ToString)
                               dgvProductList.ClearSelection()
                           End Sub)
            Else
                dgvProductList.Rows.Add(i, dr.Item("ProductID").ToString, dr.Item("Barcode").ToString, dr.Item("AKA").ToString, dr.Item("ProductName").ToString, dr.Item("Principal").ToString, dr.Item("CPrice").ToString, dr.Item("PPrice").ToString, dr.Item("Quantity").ToString)
                dgvProductList.ClearSelection()
            End If
            Thread.Sleep(500)
        End While
    Catch ex As Exception
        cn.Close()
        MsgBox(ex.Message, MsgBoxStyle.Critical)
    End Try
End Sub

Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
    MsgBox("Done!")
End Sub

无法将“System.__ComObject”类型的 COM 对象转换为接口类型“IRowset”。此操作失败,因为 IID 为“{0C733A7C-2A1C-11CE-ADE5-00AA0044773D}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

至少有人可以告诉我为什么我会收到这条消息dgvProductList.Rows.Add(i, dr.Item("ProductID").ToString, dr.Item("Barcode").ToString, dr.Item("AKA").ToString, dr.Item("ProductName").ToString, dr.Item("Principal").ToString, dr.Item("CPrice").ToString, dr.Item("PPrice").ToString, dr.Item("Quantity").ToString) 谢谢

标签: vb.net

解决方案


推荐阅读