【问题标题】:ConnectionString Timeout being ignoredConnectionString 超时被忽略
【发布时间】:2012-09-26 15:38:34
【问题描述】:

我有一个 .NET Windows 服务,它引用了一个调用 SQL Server 数据库的特定程序集。这些 SQL 调用的连接字符串被编码为从 ConfigurationManager.ConnectionStrings["myconnection"] 中提取。

在服务的安装目录中,我有一个配置文件,其中包含连接字符串“myconnection”,它最初没有连接超时值,并且长时间运行的查询在 30 秒后意外超时。但是,通过将“Connection Timeout=300”添加到连接字符串并重新启动服务,我们发现没有任何区别。

编辑:commandtimeout 属性设置为 300。示例如下:

SqlCommand _command     = new SqlCommand(Sql, _con);
            SqlDataReader _DR       = _command.ExecuteReader();
            _command.CommandTimeout = 300;
            string _fieldValue;
            string _columnValue;

            while (_DR.Read()){ ... }

【问题讨论】:

  • The commandtimeout property is set to 30。我们应该相信什么?
  • @GreenShepherd - 在调用 ExecuteReader 之前尝试更改 CommandTimeout。

标签: .net windows-services connection-string


【解决方案1】:

您需要将SqlCommand.CommandTimeout 设置为更高的值。

SqlCommand.CommandTimeout 是单个 sql 命令可以花费多长时间,而 SqlConnection.ConnectionTimeout 是建立与 sql server 的连接需要多长时间。

我不相信SqlCommand.CommandTimeout 可以从配置文件中设置 - 它必须在SqlCommand 本身的每个实例 上设置。

【讨论】:

  • @GreenShepherd - 将您的代码发布到您设置它的位置,也许它会帮助您找到问题。根据您的描述,这是命令超时而不是连接。另外,如果设置为 300,超时发生时是否有查询时间超过 300 秒?
  • 我在 OP 中发布了代码。不,超时发生时查询时间不会超过 300 秒。事实上,整个过程都有一个包装器,它记录查询的开始和停止时间,我们可以看到,在 sqlclient 超时错误冒泡之前需要 30 秒。
  • @GreenShepherd - 在调用 ExecuteReader 之前尝试更改 CommandTimeout。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2015-10-04
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多