CommandTimeout无效

时间:2012-02-24 14:31:43

标签: c# sql ado.net

我试图在一个测试给定连接字符串的连接的方法中更改SqlCommand查询的超时。代码类似于:

using (SqlConnection connection = new SqlConnection(connectionString))
    {
      SqlCommand cmd = new SqlCommand("SELECT ...", connection);
      cmd.CommandTimeout = 10;
      connection.Open();
      SqlDataReader reader = cmd.ExecuteReader();
      ...
      connection.Close();
    }

我想在这里有一个短暂的超时,因为我只想测试这个连接字符串是否正常。 但是,无论我在CommandTimeout上设置了什么号码(我尝试过0,1,2,4,10,30,60,120),我为虚拟连接字符串获得的实时总是大致相同(总运行时间约为15秒)。

所以,在我看来,我在CommandTimeout上设置的值由于某种原因被忽略了。

任何想法为什么?

4 个答案:

答案 0 :(得分:6)

我认为你对SqlCommand.CommandTimeout究竟是什么感到困惑。根据{{​​3}}:

  

获取或设置终止尝试执行命令并生成错误之前的等待时间。

在您的情况下,您正在执行DataReader并逐步执行查询(无论它是什么)。每个Read()花费最少的时间,这就是为什么你不会达到你的超时。

修改

如果使用错误的连接字符串,则Timeout将不是命令超时,但它将是连接时间。默认为15秒。这是在你的情况下有效的超时。

您将在方法调用SqlConnection.Open()上超时,而不是SqlCommand.ExecuteReader()。因此ConnectionTimeout属性将成为有效的超时值。

this MSDN reference

答案 1 :(得分:1)

您还需要检查连接超时,默认值为15秒。

另见http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx - 如果您的连接字符串有上下文,则忽略CommandTimeout

答案 2 :(得分:0)

在这种情况下,您可能想要更改SqlConnection.ConnectionTimeout

答案 3 :(得分:0)

您也可以在配置文件的连接字符串中指定:

<connectionStrings>
  <add name="*con_name*" connectionString="data source=*dsource*;initial catalog=*catalog*;integrated security=True;Connect Timeout=300;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>