2012-09-20 4 views
3

복잡한 쿼리에 Dapper를 사용하여 이전에 NH에 있었던 손실 된 오버 헤드를 제거하려고합니다.Dapper가 매개 변수를 추가하지 않습니다.

나는 다음과 같은 쿼리 (이 상당히 축소 된 참고) 한 : 그래서 우리의 저장소를 통해이라고

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에 연결하는 데 도움이됩니다.

감사

업데이트 코드 샘플 : 작업에 매우 바쁜, 너무 오래 걸려서

죄송합니다! 다음은 sys.all_objects (systables?)를 param 값 1 또는 0으로 간단하게 쿼리해야하는 MS SQL (2008) Server의 샘플입니다. 그러나이 샘플에서는 ODBC가 명명 된 params를 사용하지 않으므로이 방법은 작동하지 않습니다 .

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에는 명명 된 매개 변수에 많은 "문제"가 있습니다. * 표시된 쿼리는 모든 알기 쉬운 이름 인식 명령에서 작동해야합니다. * 실제 코드에 표시된 명령은 얼마나 가까운 거리에 있습니까? 표시된 코드가이 문제를 나타 냅니까? –

+0

난 그냥 간단한 형태로 작동하도록 위의 코드를 시도했습니다 - 그리고 여전히 행운 : ( –

+0

ODBC 연결에 대해 직접 작동 샘플 원시 코드를 포함 할 수 있습니다 –

답변

0

난 그냥 대신 쿼리의 SP를 사용, 이것은 이전 게시물 알고,이 링크 Dapper using ODBC store procedure Input parm이 사용하는 사이베이스의 ODBC SP, 모든 ODBC를 사용하는 동일한 기술을 확인하시기 바랍니다 나는 인포믹스에서 작동 바랍니다.

관련 문제