【问题标题】:Powershell SQL server database connectivity and connection timeout issuePowershell SQL server 数据库连接和连接超时问题
【发布时间】:2018-04-14 21:00:56
【问题描述】:

我有一个连接到 SQL Server 2012 数据库的 powershell 脚本,该脚本运行 SQL 查询并将结果集放入数据表中,以将格式化的电子邮件发送给相关方。下面是问题所在的代码sn-p:

$CBA = New-Object System.Data.DataSet "CBAData"
$sqlConn = New-Object System.Data.SqlClient.SqlConnection("Data Source=DataSource;Initial Catalog=DataCatalog;Integrated Security = False;Connection Timeout=800;User ID = user; Password =pwd;")
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($CBAData, $sqlConn)
$adapter.Fill($CBA)

运行脚本时出现以下错误:

Exception calling "Fill" with "1" argument(s): "Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding."

我尝试增加 SqlConnection 字符串的超时时间,从最初设置的 360 逐渐增加到现在的 800,但仍然遇到同样的问题。有没有人深入了解这里到底是什么问题?以及如何克服它?

提前谢谢你。

【问题讨论】:

  • 不是连接超时,而是执行超时不同。您连接到服务器而没有收到超时错误,但您尝试执行的查询未在 30 秒内完成
  • 奇怪。查询确实是位资源密集型,但有没有办法手动设置执行超时?

标签: sql-server powershell sql-server-2012 powershell-4.0


【解决方案1】:

如 OP 所述 - 默认命令执行超时为 30 秒。我在下面找到了:

SqlDataAdapter 类

这将允许您增加命令执行超时(插入、更新、删除、选择命令)。所以在我的情况下,下面的伎俩:

$adapter.SelectCommand.CommandTimeout=60

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    除了 Zulfiqar 的回答之外,这使我朝着正确的方向前进。对我来说,解决方案在 SqlCommand 中。我在设置适配器属性时遇到的错误如下:

    在此对象上找不到属性“CommandTimeout”。验证该属性是否存在并且可以设置。

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
    $SqlCmd.CommandTimeout = 60;
    

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 2014-10-30
      • 2018-10-12
      • 2013-10-23
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多