SQL-запрос через powershell с переменными - PullRequest
1 голос
/ 18 февраля 2012

Я пытаюсь выполнить запрос к SQL с использованием powershell и был успешным, пока не попытался выбросить параметры в миксе. Мой код выглядит следующим образом:

$parameter="TEST"
$connectionString = "CONNECTION STRING";
$Connection = New-Object System.Data.OleDb.OleDbConnection $connectionString;
$Values = New-Object System.Data.DataSet;
$SelectCommand = "Select Value FROM dbo.Values WHERE Value=@param";
$Command = New-Object System.Data.OleDb.OleDbCommand $SelectCommand,$Connection;
$Command.Parameters.Add("@param", [System.Data.OleDb.OleDbType]::VarChar, 50)
$Command.Parameters["@param"].Value = $parameter;
$adapter = New-Object System.Data.OleDb.OleDbDataAdapter $Command;
[void] $adapter.Fill($Values);

foreach($a in $Values.tables[0].Rows )
{

   #handle returned values

}

Я перепутал разные способы передачи параметра, который я нашел в Интернете, и всегда получаю один и тот же результат:

Exception calling "Fill" with "1" argument(s): "Must declare the scalar variable "@try"."
At line:28 char:31
+         [void] $adapter.Fill <<<< ($Values);
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Буду признателен за любую помощь, найти хорошие примеры SQL-запросов powershell было сложно. Использование OLeDB не обязательно, если у кого-то есть пример, использующий другого провайдера, что тоже хорошо, я также безуспешно связывался с System.Data.SqlClient.SqlConnection.

1 Ответ

3 голосов
/ 18 февраля 2012

Поскольку вы используете OleDbCommand, ваши маркеры параметров должны быть ? вместо @paramname.

Или вы можете использовать System.Data.SqlClient.SqlCommand вместо OleDbCommand, чтобы вы могли использовать @paramname.

Проверьте это:

http://blogs.msdn.com/b/spike/archive/2010/03/03/must-declare-the-scalar-variable.aspx

...