Dot-Net

查看要在 Dapper 中執行的 SQL 語句

  • February 28, 2018

我想知道在將參數解析為 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;

就基本問題而言:最簡單的方法是使用迷你分析器和包裝連接之類的工具。

Dapper確實有一些查詢操作的東西 - 但實際上:不是在所示的情況下。所以簡單的回答是,執行的 SQL 正是SQL.

大多數 ADO.NET 提供程序都支持一直到數據庫的參數。如果您的提供者沒有,那麼除非通過您的數據庫自己的監控工具,否則它將不可見。

引用自:https://stackoverflow.com/questions/27452786