首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Hxj.Data 輸出執行 SQL:RegisterSqlLogger 事件攔截、參數化 SQL 完整顯示

     編輯:關於ASP.NET

一鍵開啟 SQL 記錄,除錯、效能調校必備

註冊記錄器

private string sqlLog = "";
void Page_Load() {
    DbSession.Default.RegisterSqlLogger(OnSqlLog);
}

void OnSqlLog(string logMsg) {
    sqlLog += "
" + logMsg; // 累積顯示於頁面 } // 執行查詢... // 最後取消註冊 DbSession.Default.UnregisterSqlLogger(OnSqlLog);

實戰範例:分頁 + Join + Select

DbSession.Default.From()
    .InnerJoin(Suppliers._.SupplierID == Products._.SupplierID)
    .Page(10, 2)
    .Select(Products._.ProductID, Products._.ProductName)
    .ToDataTable();

輸出 SQL(含參數)

SELECT * FROM (
    SELECT TOP 10 * FROM (
        SELECT TOP 20 [Products].[ProductID], [Products].[ProductName]
        FROM [Products]
        INNER JOIN [Suppliers] ON ([Suppliers].[SupplierID] = [Products].[SupplierID])
        ORDER BY [Products].[ProductID] ASC
    ) AS tempIntable ORDER BY [ProductID] DESC
) AS tempOuttable ORDER BY [ProductID] ASC

簡單查詢輸出

DbSession.Default.From().Where(Products._.CategoryID == 2).ToFirst();
Text:
SELECT TOP 1 * FROM [Products] WHERE [Products].[CategoryID] = @p0
Parameters:
@p0 [Int32] = 2

記錄器格式說明

  • Text: 參數化 SQL 文字(參數以 @p0, @p1... 佔位)。
  • Parameters: 參數名稱、型別、值完整列出。
  • 可直接複製到 SSMS 執行驗證,參數順序完全對應。

進階用法:條件記錄慢查詢

DbSession.Default.RegisterSqlLogger((sql, elapsedMs) => {
    if (elapsedMs > 200) Log4net.Warn($"Slow SQL ({elapsedMs}ms): {sql}");
});

(需組件支援帶執行時間的多載,舊版僅傳 SQL 字串。)

最佳實務

  1. 開發/測試環境**全域啟用**,上線前關閉或改為慢查詢記錄。
  2. 單元測試驗證產生 SQL 是否符合預期。
  3. 效能調優時比對實際執行計畫與 ORM 產生 SQL。
  4. 避免在高併發生產環境長時間開啟,防止字串拼接開銷與記憶體壓力。

SQL 輸出功能讓 ORM 黑盒透明化,是 Hxj.Data 開發除錯的核心利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved