尝试通过 MySQL .NET 连接器更新表时,出现错误“输入字符串格式不正确”
。
更新语句在通过 MySQL 工作台运行时工作正常,但不能通过代码运行,我希望有人能告诉我原因。
代码是:
MySqlCommand command = new MySqlCommand();
command.Connection = conn;
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where amazonOrderId like '" + amazonOrderId + "%';";
command.ExecuteNonQuery();
我尝试过作为非查询执行和作为 ExecuteReader() 执行;没有运气。
我确信这是我犯的一个简单错误,但我似乎一生都找不到它,所以任何帮助将不胜感激。
-- 编辑-- 我尝试了以下方法,但没有成功:
MySqlCommand command = new MySqlCommand();
command.Connection = conn;
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where amazonOrderId like '@amazonOrderId';";
command.Parameters.AddWithValue("@amazonOrderId", amazonOrderId);
还将 CommandText 更改为:
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where convert(varchar(50), amazonOrderId) like '" + amazonOrderId + "';";
和
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where amazonOrderId = '@amazonOrderId';";
和
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where amazonOrderId = @amazonOrderId;";
-- 分辨率 --
我的解决方案实际上是在另一段代码中找到的。运行调试器几次后,很明显 MySqlConnection 对象试图实例化两次 - 使用相同的名称等。我删除了第二次实例化,它已经解决了问题。可惜这个错误具有误导性。
我感谢每个人的回应,因为我觉得他们让我的代码变得更好,因此我给 Jon、Steve 和 Chris +1。谢谢您的帮助!
最佳答案
变量 amazonOrderId
是数字吗?如果是这样,如果不对变量调用 ToString(),则无法向其添加字符串。
amazonOrderId.ToString() + "%"
数据库中的 amazonOrderId 是数字吗?如果是这样,您是否尝试过convert(varchar)?
MySqlCommand command = new MySqlCommand();
command.Connection = conn;
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where convert(varchar(50), amazonOrderId) like @OrderID;";
command.Parameters.AddWithValue("@orderID", amazonOrderId + "%");
command.ExecuteNonQuery();
但我不确定为什么你需要 LIKE 和 %。这也会更新吗:
1001 - amazon order id
10010
10011
10012
10013
etc.
这是你真正想要的吗?
如果不是,则使用 equal 代替,不带单引号。
MySqlCommand command = new MySqlCommand();
command.Connection = conn;
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where amazonOrderId = @OrderId;";
command.Parameters.AddWithValue("@orderID", amazonOrderId);
command.ExecuteNonQuery();
如果这是您想要的,那么为什么不使用介于或大于?
MySqlCommand command = new MySqlCommand();
command.Connection = conn;
command.CommandText = "update fulfilled_shipments_data set addedCustomer=1 where amazonOrderId > @OrderId;";
command.Parameters.AddWithValue("@orderID", int.Parse(amazonOrderId.ToString() + "0"));
command.ExecuteNonQuery();
关于c# - 通过 MySQL 更新时出现错误 输入字符串格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265103/