DataGrid使用SQLDataAdapter同时更新vb.net winforms中的错误

时间:2014-01-06 15:20:16

标签: vb.net winforms datagridview

我已经从两个表填充了一个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。

1 个答案:

答案 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)