簡體   English   中英

異常調用參數為“ 0”的“ ExecuteNonQuery”:“參數化查詢

[英]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.ValuemanagingDeanery列這是不正確。 並非列中的所有數據都是空的。

除了事實之外,我假設您不應該使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM