[英]Exception calling “ExecuteNonQuery” with “0” argument(s): "The parameterized query
我正在使用ADO連接從API的PowerShell輸出將數據插入MS SQL Server 2016。
我的腳本如下:
$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
我試過使用:
$cmd.Parameters.AddWithValue("@managingDeanery",'$obj.DBNull.Value');
但是,這使得所有的空字段和非空字段為$obj.DBNull.Value
在managingDeanery
列這是不正確。 並非列中的所有數據都是空的。
除了事實之外,我假設您不應該使用AddWithValue
,您必須檢查$obj.managingDeanery
的內容。 如果為null
,則必須傳遞$obj.DBNull.Value
作為參數的值
我從沒通過powershell使用過C#,但是應該像
$cmd.Parameters.AddWithValue("@managingDeanery",$obj.managingDeanery ?? $obj.DBNull.Value);
或類似的東西
$cmd.Parameters.AddWithValue("@managingDeanery",($obj.managingDeanery==null ? $obj.DBNull.Value : $obj.managingDeanery));
或簡單的if
結構...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.