我已经从两个表填充了一个DataGridView。我正在使用Windows窗体
在页面加载事件中,我有以下代码:
Dim adapter As SqlDataAdapter
Dim bSource As BindingSource
Dim dt1 As DataTable
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim con As SqlConnection = New SqlConnection("Data Source=SUPPORT2\SUPPORT2;Initial Catalog=Registry;Persist Security Info=True;User ID=sa;password=solutions") 'SET THE CONNECTION STRING
con.Open()
Dim cd As SqlCommandBuilder = New SqlCommandBuilder(adapter)
adapter = New SqlDataAdapter("select c.CompanyName,d.dtName,d.dtPhone,d.dtEmail from CompanyMaster_tbl c join DepartmentMaster_tbl d on c.Cid=d.cId", con)
dt1 = New DataTable
bSource = New BindingSource
adapter.Fill(dt1)
bSource.DataSource = dt1
gv.DataSource = bSource
End Sub
在更新按钮中单击我给出的代码如下:
Private Sub btnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnupdate.Click
gv.EndEdit()
bSource.EndEdit()
adapter.Update(dt1)
End Sub
每当我在dataGridView中编辑某些内容并单击“更新”按钮时,我在此行中收到错误 adapter.Update(dt1):错误:
当传递带有修改行的DataRow集合时,更新需要有效的UpdateCommand。
答案 0 :(得分:1)
更新在传递DataRow集合时需要有效的UpdateCommand 修改过的行。
错误是正确的,您需要提供UpdateCommand
,否则数据适配器不知道如何更新记录。
adapter.UpdateCommand = New SqlCommand("UPDATE CompanyMaster_tbl SET CompanyName = @CompanyName, dtName = @dtName, dtPhone = @dtPhone, dtEmail = @dtEmail WHERE Cid = @Cid", con)
您应该使用参数来阻止sql-injection:
adapter.UpdateCommand.Parameters.AddWithValue("@Cid", cid)
adapter.UpdateCommand.Parameters.AddWithValue("@CompanyName", CompanyName)
adapter.UpdateCommand.Parameters.AddWithValue("@dtPhone", dtPhone)
adapter.UpdateCommand.Parameters.AddWithValue("@dtEmail", dtEmail)