使用Dapper与'?'

c# dapper db2

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

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

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

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

我的陈述如下:

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

INSERT是否算作EXECUTE?据我所知,我在查询中有四个参数,在命令对象中有四个参数被使用。 (我直接使用SqlMapper.cs ,我可以在调试器中看到所有内容。)

热门答案

你可以试试这个:

    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
            });
    }


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因