2014-09-09 3 views
0
Dim myconn As New SqlConnection("Server=server,Trusted_Connection=True,Database=database") 
    'selects from mt table linking the current pc to a row 
    Dim sql As String = "SELECT * from idset " & vbcrlf & 
    "Where pcname= '" & pcname & "'" 
    Dim ds As New DataSet 
    Dim da As New SqlDataAdapter(sql, myconn) 

    da.Fill(ds, "Setup") 


    txtClientID.DataBindings.Add("text", ds.Tables("idset"), "CLID") 

Я не знаю, почему его не работает по какой-либо причине, когда он не заполнял набор данных, я заявлял что-то не так?Связывание данных с текстовыми полями

+0

Ваше изменение сделало принятый в настоящее время ответ неправильным, поскольку он ссылался на ошибку, которая больше не присутствовала. Поскольку вы не комментировали, почему вы приняли [этот ответ] (http://stackoverflow.com/a/25748228/240733), было бы лучше откатить ваше редактирование, чем обновить ответ. – stakx

ответ

3

Причина, по которой она не работает, заключается в том, что вы указываете, что входящая таблица должна быть сопоставлена ​​с таблицей Setup. Ваш набор данных не содержит таблицу с именем Setup, поэтому входящая таблица будет называться ... ну, Setup.

Попробуйте вместо этого:

da.Fill(ds, "idset") 

Кроме того, я сильно предложить вам:

  • Набор option strict на
  • Всегда используйте parameterized/prepared запросы SQL.
  • Всегда используйте инструкцию Using при работе с одноразовыми объектами.

Серьезно.


Лучший способ отладки привязок заключается в использовании BindingSource и обрабатывать BindingComplete событие.

Private bs As BindingSource 
Private ds As DataSet 

Private Sub Initialize(pcname As String) 

    Me.ds = New DataSet() 

    Using connection As New SqlConnection("Server=server,Trusted_Connection=True,Database=database") 
     connection.Open() 
     Using command As New SqlCommand() 
      command.Connection = connection 
      command.CommandText = "SELECT * from [idset] Where [pcname] = @pcname;" 
      command.Parameters.AddWithValue("@pcname", pcname) 
      Using adapter As New SqlDataAdapter(command) 
       adapter.Fill(Me.ds, "idset") 
      End Using 
     End Using 
    End Using 

    Me.bs = New BindingSource(Me.ds, "idset") 

    AddHandler bs.BindingComplete, AddressOf Me.HandleBindingCompleted 

    Me.txtClientID.DataBindings.Add("Text", Me.bs, "CLID") 

End Sub 

Private Sub HandleBindingCompleted(sender As Object, e As BindingCompleteEventArgs) 
    If (Not e.Exception Is Nothing) Then 
     Debug.WriteLine(e.ErrorText) 
    End If 
End Sub 
+0

Извините, что я назвал настройку таблицы. Мой босс пришел рано и изменил имена на меня, все еще искореняя ошибки в другом месте :(Посмотрите на это. –

+0

Изменился, все еще ничего не получаю. Оператор sql против сервера напрямую через ssms отлично работает, поднимая строку, которую я хочу просто не похоже на привязку. –

+0

@ c.goss Пожалуйста, см. мое обновление. –

Смежные вопросы