Я пытаюсь запросить базу данных SQL и вернуть только созданные сообщения , результаты таблицы не важны.Я просмотрел несколько ответов в Интернете и придумал следующий код, но каждый раз, когда я выводил $message
, он пуст.
Может кто-нибудь сказать мне, что я делаю не так, или если есть какой-тоскрытая проблема?
$server = 'SampleServer'
$sqlQuery = "print 'sample message';"
$sqlConnection = new-object System.Data.SqlClient.SqlConnection("Server=$server; Trusted_Connection=True;")
$sqlConnection.FireInfoMessageEventOnUserErrors = $true
#Listener for messages
$handler = [System.Data.SqlClient.SqlInfoMessageEventHandler]{$message = "$($_)"}
$sqlConnection.add_InfoMessage($handler)
#tried using events, but it also didn't return anything. Assumed $Event was some system variable?
# Register-ObjectEvent -InputObject $sqlConnection -EventName InfoMessage -Action {$message = "$($Event.SourceEventArgs)"} -SupportEvent
#run Query
$sqlConnection.Open()
$sqlCommand = $sqlConnection.CreateCommand()
$sqlCommand.CommandText = $SQLQuery
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter $sqlcommand
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) | out-null
$sqlConnection.Close()
#output $message results
write-host $message
Кроме того, я не могу использовать Invoke-SqlCommand
.
РЕДАКТИРОВАТЬ Так что, после еще немного повозиться с кодом, на самом деле нетпроблема с этим, но есть проблема с тем, как сообщение запроса возвращается из блока $handler
.Если я добавлю write-host
в блок $handler
, он будет работать нормально, но мне понадобится информация позже в моем скрипте.Я пробовал эти решения безрезультатно (также добавил return $message
к $handler
):
$message = $sqlConnection.add_InfoMessage($handler) #nothing returned
$sqlConnection.add_InfoMessage($message = $handler) #just plain wrong
Есть ли правильное место для размещения назначения в этой ситуации?