2012-09-20 109 views
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)Server的示例,该示例应该简单查询参数值为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 }); 
      } 
     } 
} 
+1

从内存来看,ODBC/ifx在命名参数上有很多“问题”。显示的查询*应该*在任何理智的名称感知命令中工作。显示给* actual *代码的命令有多近?显示的代码是否存在这个问题? –

+0

我刚刚尝试了上面的代码,以确保它能够以最简单的形式工作 - 并且仍然没有运气:( –

+0

可以包含直接针对odbc连接的示例原始代码 –

回答

0

我知道这是旧的文章,只是使用的,而不是查询SP,请检查此链接Dapper using ODBC store procedure Input parm,这种使用Sybase ODBC SP,所有ODBC使用相同的技术,我想它的工作原理Informix中。