【问题标题】:Dapper not adding parametersDapper 不添加参数
【发布时间】:2012-09-20 09:31:06
【问题描述】:

我正在尝试将 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) 服务器的示例,它应该使用参数值 1 或 0 简单地查询 sys.all_objects (systables?) - 但在此示例中,由于 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 });
            }
        }
}

【问题讨论】:

  • 从内存来看,ODBC / ifx 有很多命名参数的“问题”。所示的查询应该在任何理智的、可识别名称的命令中工作。显示的命令与 实际 代码有多接近?显示的代码是否存在此问题?
  • 我刚刚尝试了上面的代码以确保它以最简单的形式工作 - 仍然没有运气:(
  • 您能否包含直接针对 odbc 连接工作的示例原始代码
  • 补充 Marc 的评论,根据我的经验,使用 ODBC 查询 Informix DB 可能会令人沮丧。为了找出 ODBC 实际将查询发送到数据库进行评估的确切格式,我过去使用像 Wireshark 这样的数据包嗅探器并检查 TCP/IP 数据包中的原始数据取得了相当大的成功。

标签: sql odbc informix dapper


【解决方案1】:

我知道这是旧帖子,只使用 SP 而不是查询,请查看此链接Dapper using ODBC store procedure Input parm,此使用 sybase odbc Sp,所有 odbc 都使用相同的技术,我希望它可以在 Informix 中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多