2014-01-17 59 views
1

我有一個.NET Web應用程序頻繁地執行查詢從本地數據庫中獲取數據。ELMAH - 在數據庫中記錄SQL審查elmah.axd

在其中查詢不會運行(由於異常)的情況下或該查詢返回一個意外的數據集(例如,一個空集)。我希望能夠重建查詢(用實際使用的值替換它的@parameters),並將完整的查詢與異常一起存儲在數據庫中。

我知道,我可以通過標準的代碼,這樣做,但我不知道是否會通過ELMAH會更安全嗎?

也將通過ELMAH這樣做給我能夠通過elmah.axd(啓用了訪問時)來查看執行的SQL的能力嗎?

回答

0

除非拋出的異常包括與實際值的查詢,ELMAH不會幫你不用註銷例外還有其他的。您可以自己捕捉異常,並使用ErrorSignal.Raise方法自定義日誌記錄,如下所述:How to use ELMAH to manually log errors?

0

我通過將異常和實際命令傳遞給新的Exception類來記錄SQL異常。該類包裝SqlException和System.Data.Common.DbCommand對象。利用這些信息,我可以創造一個消息提供SQL命令的詳細信息:

public override string Message 
    { 
     get 
     { 
      StringBuilder message = new StringBuilder(""); 
      StringBuilder sql = new StringBuilder(""); 
      sql.AppendFormat(" {0} ", Command.CommandText); 
      foreach (SqlParameter param in Command.Parameters) 
      { 
       sql.AppendFormat(" {0} - {1}", param.ParameterName, 
           param.Value.ToString()); 
      } 
      message.AppendFormat("Error: {0} SQL: {1} User: {2}", SqlEx.Message, 
            sql, Username); 
      return message.ToString(); 
     } 

    } 

最後,我用的是ErrorSignal提高方法登錄ELMAH消息:

Elmah.ErrorSignal.FromCurrentContext().Raise(new DetailSqlException(e.Exception as SqlException, e.Command, user));