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語句中傳遞參數的答案是沒有用的。
謝謝。
[參數DB2查詢從.net]的可能的複製(https://stackoverflow.com/questions/2374698/parameterized-db2-query-from-net) – BugFinder
爲什麼豈不是有幫助嗎?所有SQL語句類型的參數都以相同的方式傳遞。 – jmarkmurphy
嘗試在'VALUES'子句中提供顯式的數據類型信息,例如'VALUES(CAST(@ column1 AS VARCHAR(100)),CAST(@ column2 AS INTEGER))'(使用適當的數據類型,當然)。 – mustaccio