【问题标题】:Diagnose SQL running from Power Shell诊断从 Powershell 运行的 SQL
【发布时间】:2018-05-09 10:52:41
【问题描述】:

我正在尝试从 Power Shell(在我的 windows 7 64 位桌面上)运行 SQL,远程数据库主机是 MS SQL Server 2012。

代码是:

$Server= ".\DB_HOST_NAME"
$Database = "master"
$UserSqlQuery= $("select count(*) from [master].[sys].[some_table]")

# executes a query and populates the $datatable with the data
function ExecuteSqlQuery ($Server, $Database, $SQLQuery) {
    $Datatable = New-Object System.Data.DataTable

    $Connection = New-Object System.Data.SQLClient.SQLConnection
    $Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=true;" 
    $Connection.Open()
    $Command = New-Object System.Data.SQLClient.SQLCommand
    $Command.Connection = $Connection
    $Command.CommandText = $SQLQuery
    $Reader = $Command.ExecuteReader()
    $Datatable.Load($Reader)
    $Connection.Close()
    $Datatable
    return $Datatable
}

# declaration not necessary, but good practice
$resultsDataTable = New-Object System.Data.DataTable
$resultsDataTable = ExecuteSqlQuery $Server $Database $UserSqlQuery 

Write-Host "Statistic: " $resultsDataTable
Write-Host "Message: Transaction Delay is " $resultsDataTable.Rows.Count

当我从 Windows PowerShell 运行此程序时,我收到以下错误:

使用“0”参数调用“Open”的异常:“与网络相关的或 建立连接时发生特定于实例的错误 SQL 服务器。服务器未找到或无法访问。核实 实例名称正确且 SQL Server 配置为 允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定实例)”在 H:\test2.ps1:11 char:5 + $Connection.Open() +~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SqlException

使用“0”参数调用“ExecuteReader”的异常:“ExecuteReader” 需要一个开放且可用的连接。连接的电流 状态已关闭。”在 H:\test2.ps1:15 char:5 + $Reader = $Command.ExecuteReader() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : InvalidOperationException

使用“1”个参数调用“Load”的异常:“值不能为空。 参数名称:dataReader" At H:\test2.ps1:16 char:5 + $Datatable.Load($Reader) + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentNullException

所以第一个错误是$Connection.Open(),但我对电源外壳一无所知,无法找出问题所在。我尝试在同一个数据库主机上运行相同的 SQL,它确实返回了一个数字。

我可以得到一些帮助以了解我在这里做错了什么吗?

【问题讨论】:

  • 在此站点中搜索 在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器。这不是 PowerShell 问题。
  • DBA 检查并确认 TCP/IP 已启用,但命名管道已禁用。那(命名管道被禁用)会是一个问题吗?

标签: sql-server-2012 powershell-2.0


【解决方案1】:

这段代码:

$Server= ".\DB_HOST_NAME"

应该是:

$Server= "DB_HOST_NAME"

规范“.\DB_HOST_NAME”被解释为在本地机器上运行的命名实例 (DB_HOST_NAME)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多