2012-09-20 116 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中。