Связи - это драгоценные ресурсы. Они должны быть открыты в последний возможный момент (прямо перед методом .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:\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