gpt4 book ai didi

C# MySQL 事务提交

转载 作者:行者123 更新时间:2023-11-29 02:21:41 25 4
gpt4 key购买 nike

我想更新 ~50 行。所以我在foreach中做代码运行没有任何错误,但数据库中没有任何更改。

public void updateItems(List<product> prdList)
{
MySqlTransaction tr = null;

try
{
tr = this.con.BeginTransaction();

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.Transaction = tr;

foreach (product prd in prdList)
{
cmd.CommandText = "UPDATE products SET title='@title', quantity='@quantity' WHERE itemId LIKE '@itemId'";
cmd.Parameters.AddWithValue("@title", prd.title);
cmd.Parameters.AddWithValue("@quantity", prd.quantity);
cmd.Parameters.AddWithValue("@itemId", prd.itemId);

cmd.ExecuteNonQuery();
}

tr.Commit();
}
catch (MySqlException ex)
{
try
{
tr.Rollback();
}
catch (MySqlException ex1)
{
MessageBox.Show(ex1.ToString());
}

MessageBox.Show(ex.ToString());
}
}

如果我打印查询字符串并在 SQL-Bash 上运行它,它工作正常。

最佳答案

您不应在参数中使用单引号。使用单引号,您的查询将它们视为 string literal ,不是参数。

cmd.CommandText = "UPDATE products SET title=@title, quantity=@quantity WHERE itemId LIKE @itemId";

此外,由于您尝试参数化 LIKE部分,你需要使用 %..% part in your parameter part or like '%' + @itemId + '%' .

顺便说一下,如果你有多个prd在你的prdList ,您需要清除 foreach 顶部的所有参数循环。

foreach (product prd in prdList)
{
cmd.Parameters.Clear();
...
...
}

最后一点,不要使用 AddWithValue了。 It may generate unexpected results sometimes .使用 .Add()方法重载以指定您的参数类型及其大小。并且不要忘记使用 using statement自动处理您的连接和命令。

关于C# MySQL 事务提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com