我需要一些帮助,请帮帮我。我想用来自数据库的数据填充组合框。我正在使用MS访问。我想做的是用数据库中的一个名称或一列来填充组合框。我很难做到这一点。
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
我不明白,它指向了我的关联声明。
连接是宝贵的资源。它们需要在最后可能的时刻(就在.Execute...
方法之前(打开,并尽快关闭和处理。
某些数据库对象(如Connection
和Command
(在后台使用非托管资源。他们将在.Dispose
方法中释放这些资源。为了避免我们不得不.Close和.Dispose这些对象,我们有Using...End Using
块,即使出现错误,也可以为我们处理这项家务。在该代码中,连接和命令都由单个Using
块处理。
我缩短了代码,将连接字符串直接传递给连接的构造函数,同样将命令文本和连接直接传递给命令的构造函数。
只要读卡器处于活动状态,连接就必须保持打开状态。我使用了一个DataTable
,我可以用阅读器快速加载它,然后关闭与End Using
的连接。然后,我们通过将.DisplayMember
设置为字段名称并将DataSource
设置为DataTable
来更新用户界面。
Private Sub FillComboBox()
Dim dt As New DataTable
Using con As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersathanDocumentsPAGEANT.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
我已经找到解决方案
Dim rdr as OleDb.OleDbDataReader
Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersathanDocumentsPAGEANT.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
感谢您的反馈。下次我发布问题时,我会记住你们所说的话。