2017-09-11 1 views
1

행이 목표 테이블에 없을 때만 매개 변수가있는 일괄 처리로 여러 행을 삽입하기 위해 SQL 문을 쓰려고합니다.C# ADO.NET의 매개 변수를 사용하여 행을 DB2 iSeries로 업서스하는 방법은 무엇입니까?

SQL 쿼리에 매개 변수 표식을 전달하는 방법에 문제가 있습니다. 아래 코드를 사용할 때 예외가 발생했습니다. "SQL0584 VALUES의 NULL 또는 매개 변수 표식이 허용되지 않습니다."

using (var conn = new iDB2Connection(_connectionString)) { 
    await conn.OpenAsync(); 
    using (var tran = conn.BeginTransaction()) { 
     using (var cmd = conn.CreateCommand()) { 
      cmd.Transaction = tran; 
      cmd.CommandText = @" 
       MERGE INTO TableXYZ AS mt 
       USING (
        VALUES(@column1, @column2) 
       ) AS vt(Column1, Column2) 
       ON (
        mt.Column1 = vt.Column1 AND mt.Column2 = vt.Column2 
       ) 
       WHEN NOT MATCHED THEN 
        INSERT (Column1, Column2) VALUES (vt.Column1, vt.Column2) 
      "; 
      cmd.DeriveParameters(); 

      foreach (var item in items) { 
       cmd.Parameters["@column1"].Value = item.Column1; 
       cmd.Parameters["@column2"].Value = item.Column2; 
       cmd.AddBatch(); 
      } 

      await cmd.ExecuteNonQueryAsync(); 
     } 
     tran.Commit(); 
    } 
} 

제안 사항이 있으십니까?

질문은 입니다. 매개 변수 표식을 MERGE 쿼리에 전달하는 방법. C# 코드에는 아무런 문제가 없으며 INSERT 또는 UPDATE 문에서 매개 변수를 전달하는 방법에 대한 답을 보내면 도움이되지 않습니다.

감사합니다.

+1

가능한 복제 (https://stackoverflow.com/questions/2374698/parameterized-db2-query-from-net) – BugFinder

+0

왜 도움이되지 않을 것? 매개 변수는 모든 SQL 문 유형에 대해 동일한 방식으로 전달됩니다. – jmarkmurphy

+2

명시 적 데이터 유형 정보를 'VALUES' 절에 제공하십시오. VALUES (CAST (@ column1 AS VARCHAR (100)), CAST (@ column2 AS INTEGER))'(적절한 데이터 유형을 사용하십시오. – mustaccio

답변

1

감사합니다. @mustaccio!

VALUES (...) 문의 명시 적 데이터 유형이 도움이되었습니다.

cmd.CommandText = @" 
    MERGE INTO TableXYZ AS mt 
    USING (
     VALUES(CAST(@column1 AS BIGINT), CAST(@column2 AS BIGINT)) 
    ) AS vt(Column1, Column2) 
    ON (
     mt.Column1 = vt.Column1 AND mt.Column2 = vt.Column2 
    ) 
    WHEN NOT MATCHED THEN 
     INSERT (Column1, Column2) VALUES (vt.Column1, vt.Column2) 
"; 
[.NET에서 매개 변수화 된 DB2 쿼리]의
관련 문제