1
我使用ADO連接到從一個API輸出的PowerShell中插入數據的MS SQL Server 2016異常調用「的ExecuteNonQuery」和「0」的說法(S):「參數化查詢
我下面的腳本:
$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=XYZ; Initial Catalog=Z; Integrated Security=SSPI")
$conn.Open()
$cmd = $conn.CreateCommand()
$JSONResult |Select id,surname,managingDeanery
foreach($obj in $JSONResult) {
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $dbConnection
$cmd.CommandText = "INSERT Client (id,surname,managingDeanery) VALUES (@id,@surname,@managingDeanery)"
$cmd.Parameters.AddWithValue("@id",$obj.id);
$cmd.Parameters.AddWithValue("@surname",$obj.surname);
$cmd.Parameters.AddWithValue("@managingDeanery",$obj.managingDeanery);
$cmd.ExecuteNonQuery()
$cmd.Parameters.clear();
}
$conn.Close()
我得到的錯誤是:
:Exception calling "ExecuteNonQuery" with "0" argument(s): "The parameterized query '(@id int,@surname nvarchar(9),@managingDeanery nvarchar(4000))IN'
expects the parameter '@managingDeanery', which was not supplied."
At line:30 char:5
+ $cmd.ExecuteNonQuery()
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [],
MethodInvocationException
+ FullyQualifiedErrorId : SqlException
我已經嘗試使用10
但是,這使得managingDeanery
列中的所有空字段和非空字段爲$obj.DBNull.Value
,這是不正確的。並非所有列中的數據都是空的。
您正在引用參數值在你的第二個工作示例中。您是否嘗試在$ obj.surname周圍使用引號? – Michael
_ $ Command_或_ $ cmd_這裏的正確答案是什麼? – Steve
請勿使用AddWithValue。相反,請使用指定了正確的SQL類型的Add方法(https://msdn.microsoft.com/zh-cn/library/wbys3e9s.aspx)。 –