【发布时间】:2018-05-16 08:16:31
【问题描述】:
我在 form1 中有一个 datagridview,用户选择一行并将相关详细信息发送到 form2 中的相关文本框。从这里用户单击一个按钮,该按钮应更新所选行中的单元格(在数据库中)并将其更改为“生产中”(这是 orderstatus 文本框。
我希望能够更新与客户 ID 相关的行,客户 ID 是数据库中的主键...目前软件会更新数据库表中的所有内容...
MAcon.Open();
OleDbCommand cm = new OleDbCommand("UPDATE [Customer Orders] SET [Order Status]=@OrderStatus WHERE [CustomerID]=@CustomerID", MAcon);
cm.Parameters.AddWithValue("@OrderStatus", textBox4.Text);
cm.Parameters.AddWithValue("@CustomerID", CustID.Text);
cm.ExecuteNonQuery();
MAcon.Close();
【问题讨论】:
-
更新数据库表中的所有内容是什么意思?不止一排?或者您的 SET 语句中未列出的列?如果您使用正确的变量值将该查询复制/粘贴到管理工作室中,您会得到预期的结果吗?如果没有,具体发生了什么您没有预料到的事情?
-
更新不止一行
-
数据库表的完整结构是什么?它是什么类型的数据库?表中有多少条记录?记录样本是什么样的?
-
如果更新超过 1 行,那么您的 CustomerId 字段不是唯一的。并且不能是您的主键。至少不是自己。该表是否只有一个自动递增的标识字段,可能是“Id”。
-
如果您将 customerid 硬编码到查询中会发生什么。它会产生同样的问题吗?您确定没有其他代码可以在没有 WHERE 子句的情况下进行测试吗?
标签: c#