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

时间:2018-10-12 18:40:38

标签: c# sql-server azure-sql-database

我已根据SQL Server中的文档将命令超时设置为0。我正在索引一个大表,但仍然出现异常“执行超时已过期”。在操作完成之前超时或服务器没有响应。通过SQL Server监视器,服务器正在响应。

以下是相关代码:

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秒。我正在为一列中的3,100万行表编制索引。

1 个答案:

答案 0 :(得分:0)

首先,连接超时和命令超时不是同一回事。确保您了解差异并正确使用它们。

第二,如果这是来自网页,则还需要考虑与Web服务器等有关的超时值。

第三,要验证是否确实存在超时问题,请在SSMS中执行索引语句,并找出需要花费多长时间。由于实际的索引编制都是在SQL服务器上进行的,而不管它是从哪里调用的,因此无论是从SSMS还是从应用程序运行,索引编制时间都应该大致相等。