Dapper未添加参数

3

我正在尝试使用Dapper处理我们复杂的查询,以消除以前在NH中存在的任何额外开销。

我有以下查询(注意这已经大大缩小):

SELECT DISTINCT *
FROM  tasks t 
WHERE t.initials = @UserInits

这个函数通过我们的代码库进行调用,代码如下:

taskRepo.RawExec<TaskListItemDTO>(Query,new {UserInits = "SAS"})

我们的DapperExec实现如下所示:
public IEnumerable<T> RawExec<T>(string SQL, object param)
{
   return _session.Connection.Query<T>(SQL,param);
}

但是Dapper似乎没有将参数添加到查询中,因此,我们得到了语法错误。
如果有帮助的话,我们正在通过ODBC连接到Informix。
谢谢。
更新代码示例:
抱歉让你等这么久,工作很忙!以下是一个针对MS SQL(2008)服务器的示例,应该可以简单地查询sys.all_objects(systables?)并且参数值为1或0 - 但在此示例中,由于ODBC不使用命名参数,这无法正常工作。
using Dapper;
using DapperSQL;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;

namespace DapperTests
{
    public class SQLEx
    {
        private OdbcConnection GetConnection()
        {
            var cnn = new OdbcConnection("DSN=ODBCSOURCE");
            cnn.Open();

            // wrap the connection with a profiling connection that tracks timings 
            return cnn;
        }

        public IEnumerable<object> DapperTest()
        {
            using (OdbcConnection conn = GetConnection())
            {
                return conn.Query("SELECT * FROM sys.all_objects where is_ms_shipped = ?", new { is_ms_shipped = 1 });
            }
        }
}

1
从记忆来看,ODBC / ifx在使用命名参数时存在许多“问题”。如所示的查询应该可以在任何理智的、具有名称意识的命令中工作。所示的命令与实际代码有多接近?所示的代码是否存在此问题? - Marc Gravell
我刚刚尝试了上面的代码,以确保它在最简单的形式下能够正常工作 - 但仍然没有成功 :( - Stuart.Sklinar
你能否提供一个直接针对ODBC连接工作的原始代码示例? - Sam Saffron
1
补充Marc的评论,根据我的经验,使用ODBC查询Informix DB可能会令人沮丧。为了找出ODBC实际上将您的查询以哪种格式发送到数据库进行评估,我过去使用像Wireshark这样的数据包嗅探器并检查TCP/IP数据包中的原始数据,取得了相当大的成功。 - PriceHardman
1个回答

0

我知道这是旧帖子,只需使用SP而不是查询,请查看此链接Dapper使用ODBC存储过程输入参数,这使用Sybase ODBC Sp,所有ODBC使用相同的技术,我希望它在Informix中起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接