2009-01-15 137 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