我正在尝试使用powershell运行针对SQL的查询,并且在我尝试在混合中抛出参数之前一直成功。我的代码如下:
$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
任何帮助将不胜感激,找到PowerShell SQL查询的好例子一直很粗糙。使用OLeDB不是必需的,如果有人使用其他提供程序的示例也很好,我也一直在使用System.Data.SqlClient.SqlConnection,但没有成功。
答案 0 :(得分:3)
由于您使用的是OleDbCommand
,因此参数标记应为?
而不是@paramname
。
或者您可以使用System.Data.SqlClient.SqlCommand
代替OleDbCommand
,以便使用@paramname
。
检查出来:
http://blogs.msdn.com/b/spike/archive/2010/03/03/must-declare-the-scalar-variable.aspx