DataAdapter не открывает само соединение с помощью метода Fill. - PullRequest
0 голосов
/ 31 марта 2020

Я использую следующую подпрограмму для заполнения списка со списком данных через dataadapter:

Public Sub Me_Sub_CboFill(ByVal Cbo As ComboBox, ByVal SqlStr As String, ByVal Dm As String, ByVal Vm As String)
    Cbo.DataSource = Nothing
    xAdapter = New MySqlDataAdapter(SqlStr, Conn)
    Dim Dt As New DataTable
    xAdapter.Fill(Dt)

    If Dt.Rows.Count = 0 Then Conn.Close()

    Cbo.DataSource = Dt
    Cbo.DisplayMember = Dm
    Cbo.ValueMember = Vm

End Sub

, но передо мной следующий MSG:

невозможно подключиться к любому из указанных MySQL хостов , но когда я открываю соединение вручную, оно работает !!

Я знаю, что dataadapter с (Fill) открывает и закрывает само соединение, но я не сделал знаю, почему это случилось с моим кодом.

кстати, я пробовал много способов проверить это, но с тем же результатом, как следующий код:

    dim dt as new datatable
    Dim xx As New MySqlDataAdapter(SqlNat, Conn)
    MsgBox(Conn.State)
    xx.Fill(Dt)

спасибо

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Если вы сохраняете ваше соединение локальным по отношению к методу, в котором оно используется, вы можете контролировать, когда оно закрывается и удаляется с помощью блока Using ... End Using. Возможно, ваше соединение было удалено другим методом из класса.

Public Sub Me_Sub_CboFill(ByVal Cbo As ComboBox, ByVal SqlStr As String, ByVal Dm As String, ByVal Vm As String)
    Cbo.DataSource = Nothing
    Dim Dt As New DataTable
    Using Conn As New MySqlConnection("Your conntection string"),
            xAdapter As New MySqlDataAdapter(SqlStr, Conn)
        xAdapter.Fill(Dt)
    End Using
    Cbo.DisplayMember = Dm
    Cbo.ValueMember = Vm
    Cbo.DataSource = Dt
End Sub
0 голосов
/ 03 апреля 2020

Я обнаружил проблему с моим кодом. Я поместил строку подключения в функцию, которую я использую для проверки соединения, и для этого мне нужно было вызвать функцию хотя бы один раз, чтобы все работало правильно.

спасибо все для всей вашей информации лучше всего,

0 голосов
/ 01 апреля 2020

Прежде всего, оператора if не должно быть, и если вы все еще хотите его использовать, закройте его с помощью «end if», иначе ваш код не будет работать. Во-вторых, если это комбобокс, зачем указывать cbo.datasource = nothing ??? Вы хотите стереть содержимое? Вместо этого используйте cbo.clear (), и тогда вы сможете использовать свою таблицу данных в качестве источника данных. Также cbo.displaymember = "Dm" вам нужны эти квоты.

...