【问题标题】:Why does the same MySql query behaves differently in code and workbench?为什么相同的 MySql 查询在代码和工作台中表现不同?
【发布时间】:2019-09-03 05:24:47
【问题描述】:

这是从我的应用程序运行的简单 mysql 查询:

    try
    {
         using (var connection = new MySqlConnection(connectionString))
         {
             var storedProcedure = "ReserveConstructB";
             using (var command = new MySqlCommand(storedProcedure, connection))
             {
                    command.CommandType = CommandType.StoredProcedure;
                    connection.Open();
                    command.ExecuteNonQuery();
             }
         }
    }

这是一个简单的存储过程:

BEGIN
    start transaction;
    select *from Kimmel_constructs for update;
END

如您所见,我没有在程序结束时提交,但无论如何,当我下次运行此程序时,即使“Kimmel_constructs”没有释放,我也会得到 lock_wait_timeout 异常。如果我从不同的连接调用 MySql Workbench 中的相同过程,我会得到异常,这将是所需的行为。这种行为的原因可能是什么?

【问题讨论】:

  • 您的connection 在处理结束事务时关闭,从而释放锁。
  • @sticky bit,是的,这似乎很合理,但我认为情况并非如此,因为即使程序完成并且连接关闭,我仍然无法从工作台调用此程序-I只能从我的应用程序中调用它。

标签: c# mysql mysql-workbench


【解决方案1】:

因为您的应用程序可能会使 mysql 忙。因此,当您的进度完成时,您需要关闭连接,例如 connection.Close(),我建议使用:

if (con.State==ConnectionState.Open)
{
  con.Close();
}
  con.Open();

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 2015-03-07
    • 2012-07-10
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多