Vb.net 为什么查询Access数据库时会出现此异常?

Vb.net 为什么查询Access数据库时会出现此异常?,vb.net,ms-access,nullreferenceexception,oledbconnection,oledbcommand,Vb.net,Ms Access,Nullreferenceexception,Oledbconnection,Oledbcommand,我需要一点帮助,请帮帮我。我想用数据库中的数据填充组合框。我正在使用MS access。我要做的是用数据库中的一个名称或一列来填充我的组合框。我很难做到这一点 Private Sub Judges_Load(sender As Object, e As EventArgs) Handles MyBase.Load With cmd .Connection.Open() .CommandText = "SELECT FullName FROM Judges

我需要一点帮助,请帮帮我。我想用数据库中的数据填充组合框。我正在使用MS access。我要做的是用数据库中的一个名称或一列来填充我的组合框。我很难做到这一点

Private Sub Judges_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    With cmd
        .Connection.Open()
        .CommandText = "SELECT FullName FROM Judges"
        rdr = cmd.ExecuteReader

        While rdr.Read()
            cmbJudges.Items.Add(rdr("FullName"))
        End While
        .ExecuteNonQuery()
        .Connection.Close()
        rdr.Close()

    End With

End Sub
但我有一个错误是这样的:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

System.Data.OleDb.OleDbCommand.Connection.get returned Nothing

我不明白这一点,它指向我的连接语句。

我已经找到了解决方案

Dim rdr as  OleDb.OleDbDataReader
Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\athan\Documents\PAGEANT.accdb")
Try

            With cmd
                .Connection = con
                .Connection.Open()
                .CommandText = "SELECT FullName from Judges"
                rdr = cmd.ExecuteReader

                While rdr.Read
                    cmbJudges.Items.Add(rdr.Item(0))
                End While
                rdr.Close()
                .Connection.Close()

            End With

        Catch ex As Exception

            Dim test = MsgBox(ex.Message)


        End Try

谢谢你的反馈。下次我发帖时,我会记住你们都说过的话。

连接是宝贵的资源。它们需要在最后一个可能的时刻打开(就在
.Execute…
方法之前),并尽快关闭和处置

一些数据库对象,如
Connection
Command
在后台使用非托管资源。他们将在
.Dispose
方法中释放这些资源。为了避免我们不得不。关闭和。处置这些对象,我们使用了
使用…End-use
块,即使出现错误,这些块也会为我们处理这项琐事。在该代码中,连接和命令都由一个
使用
块处理

通过将连接字符串直接传递给连接的构造函数,同样地,将命令文本和连接直接传递给命令的构造函数,我缩短了代码

只要读卡器处于活动状态,连接就必须保持打开状态。我使用了一个
DataTable
,我可以用读卡器快速加载它,然后关闭与
的连接,并使用
结束。然后,我们通过将
.DisplayMember
设置为字段名并将
数据源
设置为
数据表
来更新用户界面

Private Sub FillComboBox()
    Dim dt As New DataTable
    Using con As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\athan\Documents\PAGEANT.accdb"),
            cmd As New OleDbCommand("SELECT FullName from Judges", con)
        Try
            con.Open()
            dt.Load(cmd.ExecuteReader)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Using
    ComboBox1.DisplayMember = "FullName"
    ComboBox1.DataSource = dt
End Sub

这里的
ExecuteNonQuery()
的目的是什么?这将自行引发InvalidOperationException。请回答问题并提供一个。在哪里/如何初始化
cmd
?正如异常消息所指出的,
cmd.Connection
属性是
Nothing
,因此在尝试调用
cmd.Connection.Open()
时出现异常。非常感谢您的帮助和其他知识。我现在正在使用积木。