System.InvalidOperationException:使用dt.update方法通过datagridview更新表时出错

时间:2014-02-18 02:40:37

标签: sql vb.net datagridview datatable dataadapter

我有一个问题,只需点击一下按钮,就可以通过数据网格视图更新表格。 这是我的代码。

Public Sub loaddgvfrm3()
    cmdconn = New SqlConnection
    cmd = New SqlCommand
    cmdconn.ConnectionString = sqlstr
    cmdconn.Open()
    cmd.Connection = cmdconn
    cmd.CommandText = "select  period, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO, who_updated, year_student from tobee.EBD_BILLHISTORY where CLAIM_NO like '" + txtClaimno.Text + "'"
    'cmd.CommandText = "select  a.period, a.VOUCH_AMT, a.INDIVIDUAL_AMT, a.check_no, a.bal_ent, a.D_MAILED, a.DIR_NO from tobee.EBD_BILLHISTORY a left join carlos.claims_waivee b on a.CLAIM_NO = b.claim_no where b.CLAIM_NO like '" + claimno.ToString + "'"

    'Dim ds As New DataTable
    'Dim cmdbuilder = New SqlCommandBuilder(da)
    'da = New SqlDataAdapter()
    da.SelectCommand = cmd

    da.Fill(dt)
    Me.DataGridView1.DataSource = dt
    Me.DataGridView2.DataSource = dt
    cmdconn.Close()

End Sub

上面的代码是datagridview内容,我把select语句放在哪里。我正在修改datagridview

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click



    Try

        cmdBuilder = New SqlCommandBuilder(da)
        da.Update(dt)
        dt.AcceptChanges()
        'End If
        MsgBox("changes done")

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

每当我在修改某一行后单击“保存”按钮时,就会出现错误日志,

错误看起来像这样:

System.InvalidOperationException:对于不返回任何键列信息的SelectCommand,不支持UpdateCommand的动态SQL生成。  at system.data.common.dbdataadapter.updatingrowstatusErrors(RowUpdatingeventArgs rowUpdatedEvent,DataRow datarow) 在System.data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable,DataTableMapping tablemapping) 在System.Data.Common.DataAdapter.Update(DataTable dataTable) 在Educational.frmEb.btnSave_Click(对象发件人,EventArgs e)中 C:\ Users \ Fox \ Documents \ Stress Test \ Educational \ form3.vb:第220行

但程序仍在继续。 我看不到我在DGV中对数据库所做的任何更改。 有什么东西我不见了吗?

这是我的宣言

Dim connstr As String = "server=midtelephone\sqlexpress; database=testdb; user= sa; password=sa;"
Dim cmdconn = New SqlConnection
Dim cmdBuilder As SqlCommandBuilder
Dim da As New SqlDataAdapter()
Dim dt As New DataTable

在该错误之前,他们说我需要在数据库中设置主键/唯一键,所以我做了,但同样的错误出来了。

请帮助我,我真的陷入了这个阶段,如果你这样做,我会永远感激,因为这是我项目的最后一部分。使用da.update更新我从dgv更改到数据库的更改。

1 个答案:

答案 0 :(得分:0)

命令构建器只能在以下情况下生成UpdateCommand和DeleteCommand:

  1. SelectCommand查询单个表。
  2. 该表有一个主键。
  3. 数据适配器已知主键。
  4. 如果您已经拥有1和2,请确保将数据适配器的MissingSchemaAction属性设置为AddWithKey。