Я уже давно занимаюсь этим. У меня есть простая функция PowerShell, которая принимает открытое соединение с SQL Server и строку, содержащую команду SQL, и запускает ее на сервере. Функция должна возвращать целочисленное значение, представляющее количество строк, которые были обновлены. Однако вместо этого он выводит информацию о методе.
Код:
function Invoke-MSSQLNonQuery () {
param (
[System.Data.SqlClient.SqlConnection]$Connection,
[string]$Command
)
# Create the SQL Command Ojbect
$SQLCommand = New-Object System.Data.SqlClient.SqlCommand
# Set the Command Text and Connection for the Command
$SQLCommand.CommandText=$Command
$SQLCommand.Connection=$Connection
# Run command and return the rows affected
[int]($SQLCommand.ExecuteNonQuery | Out-String)
}
Однако при выполнении я получаю следующую ошибку:
Cannot convert value "
OverloadDefinitions
-------------------
int ExecuteNonQuery()
int IDbCommand.ExecuteNonQuery()
" to type "System.Int32". Error: "Input string was not in a correct format."
At C:\_Local\playground\Mason\UpdateFromInventory.ps1:153 char:5
+ [int]($SQLCommand.ExecuteNonQuery | Out-String)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Я знаю, что ExecuteNonQuery
при передаче по каналу Out-String
выводит таблицу с определениями перегрузки:
OverloadDefinitions
-------------------
int ExecuteNonQuery()
int IDbCommand.ExecuteNonQuery()
Я также пытался ни к чему не привязывать, что привело к аналогичному результату без заголовка таблицы.
Редактировать: Кроме того, я должен отметить, что я на 95% уверен, что команды SQL выполняются успешно. Я точно знаю, что эта функция уже работала, даже возвращая правильный вывод. Однако долгое время этого не происходило.
Мои вопросы:
- Почему?
- Как я могу получить вывод количества затронутых строк вместо этого?