我收到
下面的错误消息对于不返回任何键列信息的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}}的情况下进行更改后如何更新我的数据库?是否有可能使用另一种方式,我只能使用我的列名和表名(我只找到了一个解决方案,其中每个元素必须手动编写,而且太多了)?
答案 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()。您应该通过添加/更新网格中的任何记录来插入/更新到数据库中。