Sql DataBase不会更新更改

时间:2015-01-28 09:52:32

标签: c# sql database winforms

我收到

下面的错误消息
  

对于不返回任何键列信息的select命令,不支持update命令的动态sql生成

我在GridView进行更改后尝试通过按钮点击更新数据库。以下是代码:

private void updateDB_Click(object sender, EventArgs e)
{
    SqlDataAdapter sqlAdapter = new SqlAdapter(@"SELECT [Customer],[Employee],[Product],[State] FROM [Table1]", connection);
    sqlCmdBuilder = new SqlCommandBuilder(sqlAdapter);
    DataTable datTable = dataGridView1.DataSource as DataTable;
    sqlAdapter.Update(datTable);
}

我已经搜索了很多寻找解决方案,但我找不到有用的东西。我知道这是因为我的数据库中缺少PrimaryKey但是假设没有PrimaryKey

那么如何在没有定义{{1}}的情况下进行更改后如何更新我的数据库?是否有可能使用另一种方式,我只能使用我的列名和表名(我只找到了一个解决方案,其中每个元素必须手动编写,而且太多了)?

2 个答案:

答案 0 :(得分:1)

"我的数据库中缺少主键但是假设没有"

这是你的问题。如果没有主键,DataAdapter将无法确定要更新的行,因此在尝试时会失败。

正如您所指出的那样,您可以手动编写更新SQL,但如果您的表中包含需要单独更新的行,则可以使用主键。

答案 1 :(得分:0)

使用此代码,您将更新DataTable,而不是数据库。您可以阅读此Article

  SqlDataAdapter sqlAdapter = new SqlAdapter(@"SELECT [Customer],[Employee],[Product],[State] FROM [Table1]", connection);
  sqlCmdBuilder = new SqlCommandBuilder(sqlAdapter);
  DataTable datTable = dataGridView1.DataSource as DataTable;
  sqlAdapter.Update(datTable);
  sqlAdapter.Dispose();// SqlDataAdapter must be Disposed !

从你的问题

  

当我尝试通过按钮

更新我的数据库时

如果要更新数据库,则需要更新查询并调用SqlCommand的ExecuteNonQuery()。您应该通过添加/更新网格中的任何记录来插入/更新到数据库中。