`在vb.net中调用“Fill”之前,select命令属性尚未初始化

`在vb.net中调用“Fill”之前,select命令属性尚未初始化,vb.net,Vb.net,我的代码中缺少什么?我看了教程的每一步 我尝试了很多次,但最终还是出现了以下错误: Private Sub Retrieve() ListView1.Items.Clear() Dim sql As String = "SELECT * FROM tblpayin" cmd = New OleDbCommand(sql, con) Try con.Open() adapter.Fi

我的代码中缺少什么?我看了教程的每一步

我尝试了很多次,但最终还是出现了以下错误:

Private Sub Retrieve()
        ListView1.Items.Clear()

        Dim sql As String = "SELECT * FROM tblpayin"
        cmd = New OleDbCommand(sql, con)

        Try
            con.Open()
            adapter.Fill(dt)

            For Each row In dt.Rows
                populate(row(1), row(2), row(3), row(4), row(5), row(6), row(7), row(8), row(9), row(10), row(11), row(12), row(13), row(14), row(15), row(16), row(17), row(18), row(19), row(20), row(21), row(22))
            Next
            dt.Rows.Clear()
            con.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
            con.Close()

        End Try

    End Sub

Private Sub populate(ID As String, FN As String, MN As String, LN As String, AD As String, CN As String, MD As String, PC As String, AM As String, TE As String, M1 As String, M2 As String, M3 As String, M4 As String, M5 As String, M6 As String, M7 As String, M8 As String, M9 As String, M10 As String, M11 As String, M12 As String)

        Dim row As String() = New String() {ID, FN, MN, LN, AD, CN, MD, PC, AM, TE, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12}
        Dim item As ListViewItem = New ListViewItem(row)
        ListView1.Items.Add(item)

    End Sub

我想从MS access数据库加载listview中的数据

尝试将用户界面代码与数据访问代码分开。检索方法不知道数据要去哪里,填充方法也不知道数据来自哪里

需要关闭和处理连接。使用…End Using块即使出现错误也要注意这一点。命令对象也属于这一类。可以在一个Using块中包含这两者

填充ListView时,不希望在添加每一行后重新绘制屏幕。如果有很多行,那么速度可能会非常慢。将ListViewItems添加到ListViewItem列表中,然后使用.BeginUpdate中包含的.AddRange方法一次性添加所有ListViewItem。EndUpdate将加快速度

Private Function Retrieve() As DataTable
    Dim dt As New DataTable
    Try
        Using con As New OleDbConnection("Your connection string"),
            cmd As New OleDbCommand("SELECT * FROM tblpayin", con)
            con.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    Return dt
End Function

Private Sub populate()
    ListView1.Items.Clear()
    Dim dt = Retrieve()
    Dim lst As New List(Of ListViewItem)
    For Each row As DataRow In dt.Rows
        Dim li As New ListViewItem({row(1).ToString, row(2).ToString, row(3).ToString, row(4).ToString, row(5).ToString, row(6).ToString, row(7).ToString, row(8).ToString, row(9).ToString, row(10).ToString, row(11).ToString, row(12).ToString, row(13).ToString, row(14).ToString, row(15).ToString, row(16).ToString, row(17).ToString, row(18).ToString, row(19).ToString, row(20).ToString, row(21).ToString, row(22).ToString})
        lst.Add(li)
    Next
    dt.Dispose()
    ListView1.BeginUpdate()
    ListView1.Items.AddRange(lst.ToArray)
    ListView1.EndUpdate()
End Sub

您正在创建一个OleDbCommand对象,然后在适配器上调用Fill。您在哪里创建适配器和cmd之间的关联?鉴于错误消息明确告诉您尚未设置SelectCommand属性,您认为您应该如何处理包含SELECT语句的命令?网络上没有任何例子会告诉你做你正在做的事情,所以阅读一些例子,按照他们实际告诉你的去做。实际上,创建这个命令是没有意义的。数据适配器构造函数将接受SELECT语句作为参数,并在内部创建命令。它甚至会接受一个连接字符串并在内部创建一个连接。您应该花一些时间阅读相关类的文档。另外,下一次不是第1行,而是第2行。。。只需使用另一个i=1到22的for循环,然后执行rowiYou甚至可以在DataTable上使用:将dt用作DataTable=Retrieve