gpt4 book ai didi

C# MySQL 在同一连接中安全地使用循环中的事务

转载 作者:行者123 更新时间:2023-11-29 13:17:40 24 4
gpt4 key购买 nike

打开连接后,我想多次执行事务,但我不想一次又一次地打开连接,因为这会极大地影响性能。使用下面的代码,我在事务已经提交或未挂起循环中第二次遇到异常。

我的问题是 - 我需要在循环末尾/代码开头添加什么才能继续在同一个 MySql 连接上使用事务?

代码:

    using (MySqlConnection conn = new MySqlConnection(hostString))
{
try
{
conn.Open();
conn.ChangeDatabase(databaseName);

/// put in db using a transaction
MySqlCommand cmd = conn.CreateCommand();
MySqlTransaction trans;
trans = conn.BeginTransaction();
cmd.Connection = conn;
cmd.Transaction = trans;

while (someStuff)
{
try
{
cmd.CommandText = getPersonUpdateString();
cmd.ExecuteNonQuery();

cmd.CommandText = getBookUpdateString();
cmd.ExecuteNonQuery();

trans.Commit();
}
catch (Exception ex)
{
writeError("", ex);
try
{
trans.Rollback();
}
catch (MySqlException)
{
writeError("", ex);
}
}
}
}
}

最佳答案

提交一笔交易后,您必须开始另一笔交易。这意味着您需要将 BeginTransaction 方法调用移动到循环中,如下所示。

        while (someStuff)            
{
MySqlTransaction trans;
try
{
trans = conn.BeginTransaction();

cmd.CommandText = getPersonUpdateString();
cmd.ExecuteNonQuery();

cmd.CommandText = getBookUpdateString();
cmd.ExecuteNonQuery();

trans.Commit();
}
catch (Exception ex)
{
writeError("", ex);
try
{
trans.Rollback();
}
catch (MySqlException)
{
writeError("", ex);
}
}
}

关于C# MySQL 在同一连接中安全地使用循环中的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266085/

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