如何使用C#ADO.NET中的参数将行插入DB2iSeries?

如何使用C#ADO.NET中的参数将行插入DB2iSeries?,c#,db2,ado,ibm-midrange,upsert,C#,Db2,Ado,Ibm Midrange,Upsert,我正在尝试编写SQL语句,以便仅当目标表中不存在多行时,才使用参数将多行批量插入表中 如何将参数标记传递到SQL查询中,我遇到了一个问题。当我使用下面的代码时,出现异常: “值中不允许使用SQL0584 NULL或参数标记。” 有什么建议吗 问题是如何将参数标记传递到合并查询中。c代码没有问题,发送关于如何在INSERT或UPDATE语句中传递参数的答案也没有帮助 谢谢 谢谢你,@mustaccio VALUES(…)语句中的显式数据类型有帮助 cmd.CommandText = @"

我正在尝试编写SQL语句,以便仅当目标表中不存在多行时,才使用参数将多行批量插入表中

如何将参数标记传递到SQL查询中,我遇到了一个问题。当我使用下面的代码时,出现异常: “值中不允许使用SQL0584 NULL或参数标记。”

有什么建议吗

问题是如何将参数标记传递到合并查询中。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)
";

可能的重复为什么没有帮助?所有SQL语句类型的参数传递方式都相同。请尝试在
VALUES
子句中提供显式数据类型信息,例如
值(CAST(@column1为VARCHAR(100))、CAST(@column2为INTEGER))
(当然,请使用适当的数据类型)。@mustaccio谢谢<代码>值(CAST(NULL AS DATE))正是我需要的技巧。
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)
";