2009-01-15 136 views
1

我記錄錯誤併發送自己的異常日誌!像下面的代碼獲取baseexception信息

private void ExceptionForm_Load(object sender, EventArgs e) 
    { 
     Type exceptionType = _exception.GetType(); 

     txtErrorMessage.Text = _exception.ToString(); 

     if (exceptionType == typeof(Sybase.DataWindow.DbErrorException)) 
     { 
      _exception = (Sybase.DataWindow.DbErrorException)_exception; 

      txtErrorMessage.Text += "Exception SQL data:" + exception; 
     } 

    } 

現在的問題是這樣的。如果(exceptionType == typeof(Sybase.DataWindow.DbErrorException))則_exception具有額外的特性,如出錯的SqlSyntax(例如,從表中更新某些內容)問題是如何顯示該數據。它似乎不是我的例外。 exceptiontype = DbErrorException,但我似乎無法將我的_exception投射到它。或者這是不好的做法?還是應該刪除所有內容並從MS安裝異常處理應用程序塊?

回答

4

問題不是演員 - 這是你的_exception變量是(大概)類型的異常。您需要聲明正確類型的新變量。另外,你有任何使用GetType()而不是「as」或「is」的理由嗎?派生異常呢?試試這個:

private void ExceptionForm_Load(object sender, EventArgs e) 
{ 
    DbErrorException specificException = _exception as DbErrorException; 
    if (specificException != null) 
    { 
    txtErrorMessage.Text += "SqlSyntax=" + specificException.SqlSyntax; 
    } 
} 
1

看起來像喬恩!不知道「as」和「is」。我的_exception確實是Exception的類型(因爲我把所有的例外都發送給這個「日誌表單」)。如果我需要所有數據,是否必須將所有數據的異常強制轉換爲特定的異常類型? (例如webexception,socketexception)

+0

「as」有效地進行了強制轉換(當它有效時;如果不是,則返回null)。如果沒有任何Exception的現有屬性爲您提供足夠的信息,則只需投射。 – 2009-01-15 13:40:03