2017-10-21 63 views
1

매개 변수화 된 쿼리 아래예외 : "내가 API에서 PowerShell을 출력에서 ​​MS SQL 서버 2016에 데이터를 삽입하는 ADO 연결을 사용하고

내 스크립트. :

$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으로 잘못 설정합니다. 열의 모든 데이터가 비어있는 것은 아닙니다.

+0

매개 변수 값을 따옴표로 묶고 있습니다 당신의 두번째 작업 예제에서. $ obj.surname 주위에 따옴표를 사용하려고 했습니까? – Michael

+0

_ $ Command_ 또는 _ $ cmd_ 여기에 올바른 것은 무엇입니까? – Steve

+0

AddWithValue를 사용하지 마십시오. 대신 적절한 SQL 형식이 지정된 Add 메서드를 사용하십시오 (https://msdn.microsoft.com/en-us/library/wbys3e9s.aspx). –

답변

0

사실 AddWithValue을 사용해서는 안된다는 사실 외에 $obj.managingDeanery의 내용을 확인해야한다고 가정합니다. null의 경우 당신은 내가 PowerShell을를 통해 C# .NET을 사용한 적이

매개 변수의 값으로 $obj.DBNull.Value을 통과해야하지만,

$cmd.Parameters.AddWithValue("@managingDeanery",($obj.managingDeanery==null ? $obj.DBNull.Value : $obj.managingDeanery)); 

같은 같은

$cmd.Parameters.AddWithValue("@managingDeanery",$obj.managingDeanery ?? $obj.DBNull.Value); 

또는 뭔가해야 또는 간단한 if 구조체 ...