我在布局视图中使用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每个客户端的数据库可能不同,所以我不能写update命令;我一直在调查这个问题,我的结论是我需要使用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设置为nothing。
你知道这里出了什么问题吗?
发布于 2010-12-21 06:08:42
在调用第二个代码片段时,根据using语句,您在第一个代码片段中创建的SqlConnection已经被释放。这就是它没有初始化的原因。您将不得不要么不处理那里的连接,要么为您的第二个代码片段创建另一个连接。
例如,如下所示:
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
Try
Using conn As New SqlConnection(connString) ' <--- need to get the connection string from somewhere here '
conn.Open()
m_Adapter.UpdateCommand.Connection = conn
Dim builder As New SqlCommandBuilder(m_Adapter)
grdLayoutView.CloseEditor()
grdLayoutView.UpdateCurrentRow()
m_Adapter.Update(m_DataSet, m_Tabla) *
End Using
Catch ex As Exception
lblEstado.Text = ex.Message
End Try
End Subhttps://stackoverflow.com/questions/4491789
复制相似问题