代码之家  ›  专栏  ›  技术社区  ›  John Wooten

正在获取SQL Server超时异常,即使命令超时设置为0

  •  1
  • John Wooten  · 技术社区  · 6 年前

    我已经根据SQLServer中的文档将命令超时设置为0。我正在索引一个大表,但仍然得到一个异常“executiontimeoutexpired”。操作完成前已过超时时间,或者服务器没有响应。我通过SQLServer监视器看到服务器正在响应。

    以下是相关代码:

    private void ExecuteQuery(string qStr)
    {
        using (SqlConnection cnx = new SqlConnection(_ConnectionString))
        {
            cnx.Open();
    
            using (SqlCommand cmd = new SqlCommand(qStr, cnx))
            {
                cmd.CommandTimeout = 0;
                cmd.ExecuteNonQuery();
            }
        }
    }
    


    Data Source='tcp:aplace.database.windows.net,1433';Initial Catalog='SQL-Dev';User Id='user@place';Password='password';Connection Timeout=360

    为什么执行超时?我的连接超时设置为7200秒,也。我正在为一列上的3100万行表编制索引。

    1 回复  |  直到 6 年前
        1
  •  0
  •   John    6 年前

    第二,如果这是来自一个web页面,那么您还需要考虑与web服务器等相关的超时值。

    第三,要验证这实际上是一个超时问题,请在SSMS中执行index语句,并找出需要多长时间。由于实际的索引是在SQL server上进行的,无论从何处调用,索引时间应该大致相等,无论是从SSMS运行还是从应用程序运行。