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

Sql System.InvalidOperationException:使用dt.update方法通过datagridview更新表时出错,sql,vb.net,datagridview,datatable,dataadapter,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,

我有一个问题,通过点击按钮的数据网格视图更新表。 这是我的密码

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
上面的代码是我放置select语句的datagridview内容。我现在正在修改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。 位于system.data.common.dbdataadapter.UpdateRowStatusErrorsRowUpdateEventArgs RowUpdateEvent,DataRow DataRow 位于System.data.Common.DbDataAdapter.UpdateFromDataTableDataTable,DataTableMapping tablemapping 位于System.Data.Common.DataAdapter.UpdateDataTable 在Educational.frmEb.btnSave_单击对象发送者,事件参数为e C:\Users\Fox\Documents\Stress Test\education\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 stuff更新我从dgv到数据库所做的更改

只有在以下情况下,命令生成器才能生成UpdateCommand和DeleteCommand:

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

这将有助于显示有问题的数据库表,但我的感觉是它没有主键我在所选表上创建了主键,但同样的错误也出现了。我在SqlDataAdapter上没有看到您的SelectCommand,请显示此信息。我已经更新了我的帖子。在哪里可以找到SqlDataAdapter上的missingSchemaAction属性。如果你说你的表有主键,那么这可能就是你想要的答案。这是我的想象吗?我是否认为我键入了数据适配器的MissingSchemaAction属性,但实际上没有?即使我没有,IDE上的“帮助”菜单是否已损坏?是的,您可能键入了它,老实说,这是我第一次使用此Visual studio。现在你知道我对这个平台有多陌生了我执行了3的操作,但出现了另一个错误:System.argumentOutOfrangeException:missingmappingaction枚举值4无效。参数名称:MissingMappingACtion