Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用主键更新1行_C# - Fatal编程技术网

C# 使用主键更新1行

C# 使用主键更新1行,c#,C#,我在form1中有一个datagridview,用户选择一行,并将相关详细信息发送到form2中的相关文本框。从这里,用户单击一个按钮,该按钮应更新所选行(数据库中)中的单元格,并将其更改为“生产中”(这是orderstatus文本框) 我希望能够更新与客户ID相关的行,这是数据库中的主键…目前软件更新数据库表中的所有内容 MAcon.Open(); OleDbCommand cm = new OleDbCommand("UPDATE [Customer Orders] SET [Order S

我在form1中有一个datagridview,用户选择一行,并将相关详细信息发送到form2中的相关文本框。从这里,用户单击一个按钮,该按钮应更新所选行(数据库中)中的单元格,并将其更改为“生产中”(这是orderstatus文本框)

我希望能够更新与客户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();

正如其他人所指出的,如果不至少对Customer Orders表进行某种定义,就很难真正了解问题

根据您提供给我们的信息进行有根据的猜测,我在这里假设客户订单上的customerID字段是一个整数

我想说,这个问题是由inherit in.AddWithValue().CustID.Text中的inherit类型转换引起的,它将返回一个字符串,因此update语句上的where子句将比较一个整数值和一个永远不相等的字符串

如果将代码更改为:

cm.Parameters.Add("@OrderStatus", SqlDbType.VarChar).Value = textBox4.Text;
cm.Parameters.Add("@CustomerID", SqlDbType.Int32).Value = textBox4.Text

这只是我的想法,所以语法和类型可能有点不正确

这是什么意思?它会更新数据库表中的所有内容?不止一行?或者SET语句中没有列出的列?如果使用正确的变量值将该查询复制/粘贴到management studio中,您会得到预期的结果吗?如果没有,具体是什么发生了您意想不到的情况?它正在更新多行数据库表的完整结构是什么?它是什么类型的数据库?表中有多少条记录?记录样本是什么样子的?如果它更新了多行,则CustomerId字段不是唯一的。并且不能是您的主键ast本身不是。表中是否只有一个自动递增的标识字段,可能是“Id”。如果将customerid硬编码到查询中会发生什么情况。它是否会产生相同的问题?是否确定没有WHERE子句就没有其他代码可以测试?