2

我正在尝试使用 Dapper 与 DB2 服务器进行通信。DB2 服务器不支持开箱即用的命名参数。它期望在每个参数的查询中都有一个问号。有没有办法用 Dapper 来支持这个?也许 Dapper 可以在调用查询之前替换所有@Name东西??如果是这样,Dapper 是否按顺序生成参数?

如果没有,似乎较新的 DB2 客户端驱动程序支持命名参数,但默认情况下它是关闭的。我不知道如何打开它。我尝试将该参数添加到db2cli.ini客户端的 [COMMON] 部分,但行为没有改变。那是给OleDB司机的。

更新:然后我尝试了 .NET 驱动程序。那个似乎解析了变量名,但是运行时我仍然遇到一个奇怪的错误:

{"ERROR [07004] [IBM][DB2/NT64] SQL0313N EXECUTE 语句中的变量数、OPEN 语句中的变量数或参数化游标的 OPEN 语句中的参数数不等于所需值的数量。"}

我的陈述如下所示:

INSERT INTO XD.ALERT (PERFORMANCE_ID, CATEGORY, TITLE, DESCRIPTION, DATETIME) VALUES(1234, :Level, :AlertID, :AlertDesc, :DateTime)

插入算作执行吗?据我所知,我在查询中有四个参数,在使用的命令对象中有四个。(我是SqlMapper.cs直接使用的,可以在调试器中看到一切。)

4

1 回答 1

0

你可以试试这个:

    public void SaveAlert(int? level, int? alertId, string alertDesc, DateTime date)
    {            
        _conn.Execute("INSERT INTO XD.ALERT(PERFORMANCE_ID, CATEGORY, TITLE, DESCRIPTION, DATETIME) VALUES(1234, @Level, @AlertID, @AlertDesc, @DateTime)",                
            new {
                Level = level,
                AlertId = alertId,
                AlertDesc = alertDesc,
                DateTime = date
            });
    }
于 2019-02-25T20:38:49.190 回答