【发布时间】:2016-05-21 16:19:59
【问题描述】:
我有一个代码 sn-p 用于连接到 SQL Server 实例并进行查询,这工作正常。
$instance="Instance"
$DB = "master"
$sqlConnection = ConnectionString $Instance $DB
$sqlConnection = New-Object System.Data.SqlClient.SQLConnection($sqlConnection)
$sqlConnection.Open()
但是,同样的代码 sn-p,如果放入一个 foreach 循环中,它必须遍历一组服务器,它就不起作用。
foreach ($instance in $Instances) {
$instance
$DB = "master"
$sqlConnection = ConnectionString $Instance $DB
$sqlConnection = New-Object System.Data.SqlClient.SQLConnection($sqlConnection)
$sqlConnection.Open()
}
错误:
使用“0”参数调用“Open”的异常:“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。验证实例名称正确且 SQL Server 配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)"
【问题讨论】:
-
不要对不同的事物使用相同的验证(这里:
$sqlConnection用于连接字符串和连接对象)。在打开连接之前检查连接字符串。另外,函数 (?)ConnectionString究竟做了什么? -
在使用相同的变量名打开一个新连接之前至少关闭连接。
-
请考虑使用
BeginProcessEnd重新使用此类连接。作为奖励,您希望关闭End块内的连接。
标签: sql-server powershell foreach