【问题标题】:How to use try catch error for sql query timeout?sql查询超时如何使用try catch错误?
【发布时间】:2013-05-14 11:57:20
【问题描述】:

如果连接c#中的sql查询出错,我该如何使用try catch?

如果我使用下面的简单代码,它确实可以工作,但发生错误所需的时间太长。如何让 try catch 更快地处理错误?

try
{
  //sql command
}
catch
{
  //display connection error
}

【问题讨论】:

  • 看来你的命令超时时间太长了。如果您使用 ADO.NET、EF、Linq2SQL 或其他什么,可能会很有趣?
  • 使用“throw new Exception()”快速抛出异常。 J/K
  • 如果您担心的错误是超时,那么根据定义,您无法更快地处理它 - 超时的全部意义在于它花费了太长时间。如果您认为确定超时的时间过长,请减少数据库连接的超时限制。
  • 更严重的是,您无法按照您的要求进行操作。查看您的错误是什么,并尝试找到在问题发生之前发现问题的方法。
  • 您可能还想在另一个线程(任务)中运行您的查询,并使用信号量(例如)等待一段时间让查询运行,直到让查询继续运行,您考虑超时。

标签: c# sql try-catch


【解决方案1】:

try-catch 将在异常发生时立即捕获,但不要期望在超时发生之前捕获超时异常。对于SqlCommand,默认超时时间为30 秒,但您可以通过设置CommandTimeout 属性来更改它:

try
{ 
    var command = new SqlCommand("...");
    command.CommandTimeout = 5; // 5 seconds
    command.ExecuteNonQuery();
}
catch(SqlException ex)
{
    // handle the exception...
}

【讨论】:

    【解决方案2】:

    在异常发生之前,您无法捕获异常。如果你想早点抓住它,就让它早点发生。具体来说,就是缩短超时时间。

    我知道如何减少 ColdFusion 中的超时时间。我必须查看 this page 以了解如何在 .net 中进行操作。

    【讨论】:

      【解决方案3】:

      按照以下方式进行:

      try
      {
        con.open();
        .
        .//Database operation
        .
        con.close();
      }
      catch(Exception ex)
      {
        MessageBox.Show("Error: "+ex.Message);//If exception will come, it will handle it here.
      }
      finally
      {
       con.close();
      }
      

      【讨论】:

        【解决方案4】:
        catch (SqlException ex)
            {
                if (ex.Number == -2)
                {
                    //handle timeout
                }        
            }
        

        【讨论】:

        • 试着给出一个解释,而不是简单的代码。
        猜你喜欢
        • 1970-01-01
        • 2015-10-19
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多