Диагностика SQL, запущенного из Power Shell - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь запустить SQL из Power Shell (который находится на моем 64-битном рабочем столе Windows 7), а удаленный хост базы данных - 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, я получаю следующие ошибки:

Исключение, вызывающее "Open" с аргументом (ами) "0": "Сетевой или при установке соединения с SQL Server. Сервер не найден или не был доступен. проверить что имя экземпляра правильное и что SQL Server настроен на разрешить удаленные подключения. (поставщик: сетевые интерфейсы SQL, ошибка: 26 - Ошибка при поиске сервера / указанного экземпляра) "В H: \ test2.ps1: 11 char: 5 + $ Connection.Open () + ~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: SqlException

Исключение, вызывающее "ExecuteReader" с аргументом (ами) "0": "ExecuteReader требуется открытое и доступное соединение. Ток соединения состояние закрыто. "В H: \ test2.ps1: 15 char: 5 + $ Reader = $ Command.ExecuteReader () + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: InvalidOperationException

Исключение, вызывающее "Load" с аргументом (ами) "1": "Значение не может быть нулевым. Имя параметра: dataReader "At H: \ test2.ps1: 16 char: 5 + $ Datatable.Load ($ Reader) + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: ArgumentNullException

Итак, первая ошибка в $Connection.Open(), но я ничего не знаю о Power Shell, чтобы выяснить, что не так. Я попытался запустить тот же SQL на том же хосте БД, и он возвращает число.

Могу ли я получить помощь, чтобы узнать, что я здесь делаю не так?

1 Ответ

0 голосов
/ 09 мая 2018

Этот код:

$Server= ".\DB_HOST_NAME"

должно быть:

$Server= "DB_HOST_NAME"

Спецификация ". \ DB_HOST_NAME" интерпретируется как именованный экземпляр (DB_HOST_NAME), работающий на вашем локальном компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...