Dapper에서 실행할 SQL 구문보기

.net ado.net dapper

문제

필자는 매개 변수가 SQL 문자열로 구문 분석 된 후 SQL 문이 실제로 어떻게 보이는지 볼 수 있는지 알고 싶습니다. 예를 들어, 다음과 같은 코드가 주어진다.

const string SQL = @"
SELECT *
   FROM V_PROVIDER_WAGE_OVER_REVENUE
WHERE SITE_ID = :SITE_ID 
   AND VENDOR_ID = :VENDOR_ID
   AND date_paid >= :DATE_FROM 
   AND date_paid <= :DATE_TO;";

conn.Query<ProviderWageOverRevenueModel>(SQL, new { 
     VENDOR_ID = vendorId, 
     SITE_ID = siteId, 
     DATE_FROM = dateFrom, 
     DATE_TO = dateTo 
}).ToList();

어떤 점에서 (어쩌면 Dapper 소스에 있습니까?) 다음과 같은 것을 볼 수 있는지 알고 싶습니다.

SELECT *
   FROM V_PROVIDER_WAGE_OVER_REVENUE
WHERE SITE_ID = 199
   AND VENDOR_ID = 17
   AND date_paid >= '01/01/2014' 
   AND date_paid <= '20/11/2014';

편집하다

매개 변수 자리 표시자가 값으로 대체 될 것이라고 가정했지만 Dapper의 소스를 면밀히 살펴본 후에 iDbCommand에서 쿼리를 실행하기 만하면됩니다. 따라서이 질문 을보고 나서 실행이 가능합니다. NET 내부의 성명?

나는 이것을 시도한다 :

string query = cmd.CommandText;
foreach (DbParameter p in cmd.Parameters)
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}

그러나 결과는 희망처럼 보이지 않습니다.

SELECT *
    FROM V_PROVIDER_WAGE_OVER_REVENUE
WHERE 23411127316 = :23411127316 
    AND 23411076816 = :23411076816
    AND date_paid >= :1/07/2014 10:11:34 PM 
    AND date_paid <= :12/12/2014 12:00:00 AM;

수락 된 답변

근본적인 질문의 관점에서 : 이것을 수행하는 가장 쉬운 방법은 미니 프로파일 러 (mini-profiler) 및 랩핑 된 연결과 같은 도구를 사용하는 것입니다.

Dapper 에는 쿼리 조작 작업이 있지만 사실은 여기에 나와 있지 않습니다. 따라서 간단한 대답은 실행 된 SQL이 정확히 SQL 의 내용이라는 것입니다.

대부분의 ADO.NET 공급자는 매개 변수를 데이터베이스까지 지원합니다. 공급자 가 그렇지 않으면 데이터베이스의 자체 모니터링 도구를 통해 표시되는 경우를 제외하고는 표시되지 않습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.