【发布时间】:2020-03-21 21:43:47
【问题描述】:
我正在使用 MariaDB 10.3.21,我想知道为什么在连接丢失后没有从 SQL-Server 完成回滚。
我正在使用下面的代码更新几个表。为了检查在连接丢失后是否还从服务器端进行回滚,我在 objTransaction.Commit() 命令中设置了一个断点,在点击它之后,我中断了网络连接。
不幸的是,字段的更新在没有提交命令的情况下被接管。我假设如果连接丢失,服务器将执行隐式回滚。
有什么想法吗?非常感谢!
public void ExecuteSQL(List<string> pQueryList)
{
using (MySqlConnection objConnection = new MySqlConnection(ConnectionString))
{
try
{
objConnection.Open();
MySqlCommand objCommand = objConnection.CreateCommand();
MySqlTransaction objTransaction;
// Start Transaction
objTransaction = objConnection.BeginTransaction();
// Must assign both transaction object and connection
// to Command object for a pending local transaction
objCommand.Connection = objConnection;
objCommand.Transaction = objTransaction;
try
{
// Set autocommit = off the this session
//objCommand.CommandText = "SET autocommit = 0";
objCommand.ExecuteNonQuery();
foreach (string query in pQueryList)
{
// Execute the SQL Queries
objCommand.CommandText = query;
if (objCommand.ExecuteNonQuery() <= 0)
{
throw (new Exception("Fehler bei ExecuteNonQuery. Anzahl der betroffenen Zeilen fehlerhaft."));
}
}
// Commit Transaction
objTransaction.Commit();
}
catch (Exception)
{
for (int i = 0; i < 3; i++)
{
// Rollback 3x versuchen (falls Netzwerkverbindung abgebrochen ist)
try
{
objTransaction.Rollback();
break;
}
catch (Exception)
{
Thread.Sleep(100);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Das speichern in die Datenbank ist fehlgeschlagen!\n\n" + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
【问题讨论】:
标签: transactions mariadb rollback