我试图在一个测试我的连接为给定的连接字符串的方法中更改SqlCommand查询的超时.代码类似于:
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("SELECT ...", connection);
cmd.CommandTimeout = 10;
connection.Open();
SqlDataReader reader = cmd.ExecuteReader();
...
connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
我想在这里有一个短暂的超时,因为我只想测试这个连接字符串是否正常.但是,无论我在CommandTimeout上设置了什么号码(我尝试过0,1,2,4,10,30,60,120),我为虚拟连接字符串获得的实时总是大致相同(总运行时间约为15秒).
所以,在我看来,我在CommandTimeout上设置的值由于某种原因被忽略.
有什么想法吗?
小智 7
我觉得你很困惑到底SqlCommand.CommandTimeout是什么.根据此MSDN参考:
获取或设置在终止执行命令并生成错误的尝试之前的等待时间.
在您的情况下,您正在执行DataReader并逐步执行查询(无论它是什么).每个时间都花费最少,Read()这就是为什么你不会达到超时的原因.
编辑:
如果使用错误的连接字符串,Timeout则不会是命令超时,但它将是连接时间.默认为15秒.这是在您的情况下有效的超时.
您将在方法调用上超时SqlConnection.Open(),而不是SqlCommand.ExecuteReader().因此该ConnectionTimeout属性将成为有效的超时值.
SqlConnection.ConnectionTimeout属性MSDN参考