gpt4 book ai didi

c# - 如何使用 C# ADO.NET 中的参数将行更新到 DB2 iSeries?

转载 作者:行者123 更新时间:2023-11-30 21:38:15 26 4
gpt4 key购买 nike

我正在尝试编写 SQL 语句,仅当目标表中不存在该行时,才将带有参数的多行批量插入表中。

我在如何将参数标记传递到 SQL 查询中时遇到问题。当我使用下面的代码时出现异常:“不允许在 VALUES 中使用 SQL0584 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 语句中传递参数也没有帮助。

谢谢。

最佳答案

谢谢@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)
";

关于c# - 如何使用 C# ADO.NET 中的参数将行更新到 DB2 iSeries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com