Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命令超时不工作_C#_Sql_Ado.net - Fatal编程技术网

C# 命令超时不工作

C# 命令超时不工作,c#,sql,ado.net,C#,Sql,Ado.net,我正在尝试更改SqlCommand查询的超时,方法是测试给定连接字符串的连接。代码与此类似: using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand("SELECT ...", connection); cmd.CommandTimeout = 10; connection.Open();

我正在尝试更改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上设置的值被忽略了

你知道为什么吗?

我想你把
SqlCommand.CommandTimeout
的确切用途弄糊涂了。根据:

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

在您的例子中,您正在执行一个DataReader并逐步完成您的查询(不管它是什么)。每次
Read()
都需要最少的时间,这就是为什么您不会达到超时的原因

编辑


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

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


您还需要检查默认为15秒的连接超时


另请参见-如果您的连接字符串具有上下文,则忽略CommandTimeout。在这种情况下,您可能需要更改您的命令。

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

<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>


不知道,但MSDN doco在声明中指出了一些可能被忽略的原因。一种是异步使用和使用BeginExecuteReader,这不是您的问题。但是,另一个是指超时“。当针对上下文连接(连接字符串中的“context connection=true”打开的SqlConnection)执行命令时无效。”“可能检查您的连接字符串,看看这是否是原因。是的,我检查了几次文档,以确保没有遗漏某些内容。无论如何,它不是异步读取器,连接字符串也没有任何上下文。与问题无关,但由于您使用的是“using”块,因此不需要执行connection.Close(),因为using块上的作用域结尾将自动关闭并处理您的连接。正如我在问题上所说的,我用一个错误的连接字符串来测试它,所以我实际上无法读取任何内容。正因为如此,我希望我的执行时间只是大约超时时间。@FlávioIvan啊,好的。我懂了。请看我的编辑。您的
SqlCommand.CommandTimeout
不是在坏连接中用于超时的。这将是
SqlConnection.ConnectionTimeout
属性。谢谢,Shark!我刚刚测试了它,现在我看到执行时间发生了变化。它仍然需要比我设置的超时时间更多的时间来运行,但现在我可以玩它了。:)“如果使用了错误的连接字符串”-->对此有何解决方法?我的连接字符串还具有“ConnectionTimeout”属性。我的连接字符串是“错误的连接字符串”吗?很抱歉,我忘记在问题中提到这一点,但我的连接字符串没有上下文。“您还需要检查连接超时,默认值为15秒。”+1