更新无法找到TableMapping ['Table']或DataTable'Table'

时间:2014-04-29 13:34:25

标签: sql-server vb.net datagridview updating

我有一个名为"用户"与一些基本字段,如姓名,地址,城市和移动。

现在,在表单加载时,我试图显示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

1 个答案:

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