我打开了一个应用程序,它调用了使用“FOR UPDATE”执行 SELECT - 锁定行。
当第二个应用程序尝试访问同一行时,应用程序挂起(直到超时):
// Simplified code
var connection = new MySqlConnection(connectionString);
connection.Open();
var transaction = connection.BeginTransaction();
MySqlCommand command = new MySqlCommand(sqlQuery, connection, transaction);
MySqlDataReader dataReader = command.ExecuteReader(); // HANGS
根据documentation它在 SqlException 下说:
An exception occurred while executing the command against a locked row
这就是我想要的 - 立即获得异常。 我试图更改命令超时,但这只是给出了一个 TimeoutException,并没有解释准确的原因。
最佳答案
您是否尝试过使用 try and catch?
var connection = new MySqlConnection(connectionString);
try
{
connection.Open();
var transaction = connection.BeginTransaction();
MySqlCommand command = new MySqlCommand(sqlQuery, connection, transaction);
MySqlDataReader dataReader = command.ExecuteReader();
}
catch (Exception)
{
throw;
}
关于c# - 如何让 C# ExecuteReader 抛出异常而不是挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420147/