我有一个名为"用户"与一些基本字段,如姓名,地址,城市和移动。
现在,在表单加载时,我试图显示datagridview中的所有行,如下所示:
Dim strConnection As String = "Data Source=.\sqlexpress;Initial Catalog=Customers;Integrated Security=True"
Dim con As New SqlConnection(strConnection)
con.Open()
Dim myadapter As New SqlDataAdapter
myadapter = New SqlDataAdapter("Select name, address, city and mobile from Users", con)
Dim ds As New DataSet
myadapter.Fill(ds, "Users")
UsersDataGridView.DataSource = ds.Tables(0)
直到这里工作正常。
现在我想更新gridview中的字段并尝试下面的代码,但它给出了一个错误:
Update unable to find TableMapping['Table'] or DataTable 'Table'.
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Dim cmdbl As New SqlCommandBuilder(myadapter)
myadapter.Update(ds, "Users")
End Sub
答案 0 :(得分:0)
这里有一些事情
1)您的示例未显示对GetUpdateCommand()的调用
请改为尝试:
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Dim cmdbl As New SqlCommandBuilder(myadapter)
cmdbl.GetUpdateCommand()
myadapter.Update(ds, "Users")
End Sub
http://msdn.microsoft.com/en-us/library/kfbedfwf(v=vs.110).aspx
2)此外,看起来您的SELECT命令不包含主键列。您需要这样,以便CommandBuilder可以构建有效的更新或删除命令。
我不知道你的表是什么样的,但如果你的主键列是名为ID,那么将原来的sql(select语句)更改为:
myadapter = New SqlDataAdapter("Select id, name, address, city and mobile from Users", con)
3)您的Select命令出现问题。特别是“城市和移动”栏目。如果这是您的列的名称,您可能需要在其周围放置分隔符:
myadapter = New SqlDataAdapter("Select id, name, address, [city and mobile] from
用户“,con) 或者你可能想说这个: myadapter =新的SqlDataAdapter(“选择ID,名称,地址,城市,来自用户的移动设备”,con)