2011-12-28 35 views
1

這個問題與Intercept SQL statements containing parameter values generated by NHibernate幾乎一樣,但到目前爲止還沒有答案。NHibernate攔截SQL語句和參數

Public Class SqlStatementInterceptor 
    Inherits EmptyInterceptor 
    Implements IInterceptor 

    Public Overrides Function OnPrepareStatement(sql As SqlString) As SqlString 
     Debug.WriteLine(String.Format("{0} - {1}", DateTime.Now, sql.ToString())) 
     Return sql 
    End Function 
End Class 

我可以捕獲SQL語句,但似乎無法獲取參數。有人曾試圖實現它?

+0

不能使用記錄器? – 2011-12-28 16:53:20

+0

@Felice Pollano我可以,但不理想。因爲我使用SQLite實現單元測試(在生產代碼中我使用SQL Server),所以在VS輸出窗口中顯示語句可能會更快。你可以看看 – hardywang 2011-12-28 17:38:08

+0

,看看回復。如果你只是想看看會發生什麼,不需要創建一個特殊的appender – 2011-12-28 18:19:06

回答

4

您需要編寫log4net appender。這就是NHProf獲取信息的方式。 codeplex上還有一個名爲NHibernate 3.0 SQL Logger的項目,它使用了這種技術。

1

您可以使用log4net,其中TraceAppender以及配置中的format_sql=true屬性有助於提高可讀性。要使用的記錄器是NHibernate.SQL