2011-12-28 34 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