Sql DataGridView中的更新问题

Sql DataGridView中的更新问题,sql,vb.net,datagridview,Sql,Vb.net,Datagridview,使用下面的SqlAdapter,我几乎可以做得很好 Private SqlDA As New SqlDataAdapter("Select * from tblContacts", SqlConn) 但如果我使用below,那么在我从SQL检索数据进行修改并使用DataTable更新之后,我会因为below的使用而被抛出。顺便说一句,第一个字段上有主键,它是标识,表示您知道的自动增加。下面不包含该字段的标题。(联系人ID) 以下是全部代码: Dim TheDataTable As Ne

使用下面的SqlAdapter,我几乎可以做得很好

Private SqlDA As New SqlDataAdapter("Select * from tblContacts", SqlConn)
但如果我使用below,那么在我从SQL检索数据进行修改并使用DataTable更新之后,我会因为below的使用而被抛出。顺便说一句,第一个字段上有主键,它是标识,表示您知道的自动增加。下面不包含该字段的标题。(联系人ID)

以下是全部代码:

    Dim TheDataTable As New DataTable
Private SqlConn As New SqlConnection("Data Source=PC-N39\sqlexpress;Initial Catalog=ADO_PRACTICE;Persist Security Info=True;User ID=sa;Password=sas")
Private SqlDA As New SqlDataAdapter("Select * from tblContacts", SqlConn)
Private SqlDataSet As New DataSet
Private SqlCmdBuilder As New SqlCommandBuilder(SqlDA)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    SqlDA.Fill(TheDataTable)
    DataGridView1.DataSource = TheDataTable
    InitializeDataGridView()
End Sub

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
    Dim x As Integer
    x = SqlDA.Update(TheDataTable)
    MessageBox.Show(CStr(x) & " record(s) updated")
End Sub

第二条语句不包含表的PrimaryKey或唯一索引列。
这就是SqlCommandBuilder无法生成适当的更新/删除/插入命令(查看存储在DataAdapter中的SelectCommand)的原因

除了将ContactID读取到您的查询中,我看不到任何解决方案


我不想在DataGridView列中显示contactID字段,另外一件事是,如果我不想在任何DataGridView中显示一个或多个字段列标题,在这种情况下该怎么办?Select*from tblContacts没有问题。我认为您应该探索DataGridView提供的隐藏列的选项。看,你的建议足以处理那个案子。感谢@Steve,但我遇到了另一个类似于“并发冲突:UpdateCommand影响了0条预期的1条记录”的问题。这是因为我试图修改最近一行上的单元格数据,该行刚刚由btnUpdate添加到DataGridView,然后抛出。
    Dim TheDataTable As New DataTable
Private SqlConn As New SqlConnection("Data Source=PC-N39\sqlexpress;Initial Catalog=ADO_PRACTICE;Persist Security Info=True;User ID=sa;Password=sas")
Private SqlDA As New SqlDataAdapter("Select * from tblContacts", SqlConn)
Private SqlDataSet As New DataSet
Private SqlCmdBuilder As New SqlCommandBuilder(SqlDA)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    SqlDA.Fill(TheDataTable)
    DataGridView1.DataSource = TheDataTable
    InitializeDataGridView()
End Sub

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
    Dim x As Integer
    x = SqlDA.Update(TheDataTable)
    MessageBox.Show(CStr(x) & " record(s) updated")
End Sub