我试图在一个测试给定连接字符串的连接的方法中更改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上设置的值由于某种原因被忽略了。
任何想法为什么?
答案 0 :(得分:6)
我认为你对 SqlCommand.CommandTimeout
究竟是什么感到困惑。根据{{3}}:
获取或设置终止尝试执行命令并生成错误之前的等待时间。
在您的情况下,您正在执行DataReader并逐步执行查询(无论它是什么)。每个 Read()
花费最少的时间,这就是为什么你不会达到你的超时。
修改强>:
如果使用错误的连接字符串,则Timeout
将不是命令超时,但它将是连接时间。默认为15秒。这是在你的情况下有效的超时。
您将在方法调用SqlConnection.Open()
上超时,而不是SqlCommand.ExecuteReader()
。因此ConnectionTimeout
属性将成为有效的超时值。
答案 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>