У меня есть сценарий PowerShell, который безопасно работает до момента обновления. Я подключаюсь к базе данных и могу читать из нее, однако у меня возникают проблемы с обновлением.
Вот копия полученного сообщения об ошибке:
«Исключение вызывает« ExecuteNonQuery »с аргументом (ами)« 0 »:« Уже есть открытый DataReader, связанный с этой командой, который должен быть закрыт первым ».
В C: \ xxx \ xxx \ ToolsController.ps1: 37 char: 5
+ $ InnerCommand.ExecuteNonQuery ()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: InvalidOperationException "
К вашему сведению: я опубликовал это раньше, и это обновление к предыдущему вопросу.
Любая помощь будет принята с благодарностью.
Я попытался прикрепить переменную в конце строки, т.е. '.. + $ varibale'
также пытался @ "" @, и я получил тот же результат.
$Global:Server = "server"
$Global:Database = "db"
$Global:u = "un"
$Global:p = "pw"
[string]$Query = "SELECT * FROM [dbo].[jobs] WHERE [Run] = 0"
try{
$ConnectionString = "server=$Server;Integrated Security=true;database=$Database;user id=$u;password=$p"
$Connection = New-Object System.Data.SqlClient.SqlConnection
$Connection.ConnectionString = $ConnectionString
$Connection.Open()
}
catch{
"Failed to connect SQL Server"
}
$Command = $Connection.CreateCommand()
$InnerCommand = $Connection.CreateCommand()
$Command.CommandText = $Query
$jobs = $Command.ExecuteReader()
while ($jobs.Read()){
switch($jobs["Script"]){
15
{
$traverse = $jobs["Frequency"] - 1
While ($traverse -ge 0) {
c:\xx\xx\batch $jobs["Date"]
$traverse--
}
"Updating Database...."
$Query2 = "UPDATE [dbo].jobs SET [Run] = 1 WHERE [ID] = $jobs['ID']" <------Error here.
$InnerCommand.CommandText = $Query2
$InnerCommand.ExecuteNonQuery()
"Updating Completed!"
}
}
}
$Connection.Close()
$Connection.Dispose()
Write-Host "Connection Closed"