有没有办法在我的代码中访问完整的SQL查询,包括值?
我能够使用log4net记录SQL查询:
但是,我想找到一种从代码中记录SQL查询的方法.这样我将在try/catch语句中记录导致异常的特定SQL查询.
现在,我必须对SQLFileLog进行数据挖掘,以便在发生异常时找到导致异常的查询并且效率不高.
你可以使用拦截器来做到这一点:
public class LoggingInterceptor : EmptyInterceptor { public override SqlString OnPrepareStatement(SqlString sql) { Debug.WriteLine(sql); return sql; } }
有关使用nhibernate注册它的不同方法,请参阅Nhibernate Docs.
你可以覆盖驱动程序:
public class LoggerSqlClientDriver:SqlClientDriver, IEmbeddedBatcherFactoryProvider { public override void AdjustCommand(IDbCommand command) { //log here base.AdjustCommand(command); } //protected override void OnBeforePrepare(IDbCommand command) //{ // //log here // base.OnBeforePrepare(command); //} }
然后在配置中使用它:
var config = Fluently.Configure(). Database(MsSqlConfiguration.MsSql2005.Driver();