Я использую devexpress XtraGrid в макете для редактирования недавно созданной строки базы данных.
Это код, который я использую для загрузки данных:
Public Function SetData(ByVal connString As String, ByVal tabla As String) As Boolean
Dim d As New DataTable
Dim cmd As New SqlCommand
Try
Using conn As New SqlConnection(connString)
conn.Open()
cmd.Connection = conn
m_Tabla = tabla
If (m_Id = "") Then
cmd.CommandText = "SELECT * FROM " & m_Tabla
Else
cmd.CommandText = "SELECT * FROM " & m_Tabla & " WHERE IdCaptura = '" & m_Id & "'"
End If
m_Adapter = New SqlDataAdapter(cmd)
m_DataSet = New DataSet()
m_Adapter.Fill(m_DataSet, m_Tabla)
grdMetadata.DataSource = m_DataSet.Tables(m_Tabla)
Return True
End Using
Catch ex As Exception
Return False
End Try
End Function
База данных может отличаться от клиента к клиенту, поэтому AFAIK Я не могу написать команду обновления; Я исследовал эту проблему и пришел к выводу, что мне нужно использовать SqlCommandBuilder для его автоматической генерации.
Когда пользователь заканчивает редактирование данных, я использую следующий фрагмент для обновления базы данных:
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
Try
Dim builder As New SqlCommandBuilder(m_Adapter)
grdLayoutView.CloseEditor()
grdLayoutView.UpdateCurrentRow()
m_Adapter.Update(m_DataSet, m_Tabla) *
Catch ex As Exception
lblEstado.Text = ex.Message
End Try
End Sub
В строке, отмеченной *, я получаю исключение «Свойство ConnectionString не было инициализировано». В таблице есть столбец первичного ключа (IdCaptura), и я вижу, что для DataAdapter.UpdateCommand не задано ничего, если я ставлю точку останова в указанной строке.
Есть идеи о том, что здесь не так?