c# - 如何让 C# ExecuteReader 抛出异常而不是挂起

标签 c# mysql .net-4.0

我打开了一个应用程序,它调用了使用“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/

相关文章:

.net-4.0 - .NET 4是否有ELMAH的版本?

c# - 如何减少线程无限循环期间的处理器使用率?

c# - NHibernate QueryOver 与 IUserType 失败

php - 在 WAMP 64 位上将 64 位 PHP 转换为 32 位

php - MySql 更新后找不到 mysql.infoschema

.net-4.0 - 为什么协变类型参数不允许我编写 [List<object> lst = new List<string>()]?

c# - EF Core 如何实现对值对象更改的审计日志

c# - 如何在没有窗体的情况下在 C# 中绘制图形

MySQL 选择 : How to get an additional column that indicates whether the first or the second condition in a WHERE clause was met?

c# - 使用公共(public)成员有什么好处/坏处/不必要的吗?