erquan

我爱你,你知道的-_-

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

根据今天下午一些朋友的提示,写出了一个简单的在 WinForm 下的异常处理机制:

1.首先定义我要处理的异常类类,如

using System;

///处理异常的名称空间
namespace ultility.cxException
{
 
/// <summary>
 
/// 数据库连接失败 的异常
 
/// </summary>

 public class NotConnectionException : Exception
 
{
  
/// <summary>
  
/// 抛出的错误信息
  
/// </summary>

  string _mess;
  
public new string Message
  
{
   
get
   
{
    
return _mess;
   }

  }

  
public NotConnectionException(string mess)
  
{
   _mess 
= mess;
  }

  
public NotConnectionException(){}
 }


 
/// <summary>
 
/// 执行 SQL 时的错误的异常
 
/// </summary>

 public class SqlErrorException : Exception
 
{
  
/// <summary>
  
/// 抛出的错误信息
  
/// </summary>

  string _mess;
  
public new string Message
  
{
   
get
   
{
    
return _mess;
   }

  }

  
public SqlErrorException(string mess)
  
{
   _mess 
= mess;
  }

  
public SqlErrorException(){}
 }

}



2.然后在业务逻辑层使用,简化了一些代码:


void test()
{
try
{
conn.Open();

      
try
      
{     cmd.ExecuteNonQuery();
      }

      
catch(SqlException e)
      
{
         
//由于是在执行 SQL 出现了 SqlException
         
//所以大部分出现 SQL 方面错误的可能性就高
         
//因此就抛出了 SqlErrorException ,让第一个 catch 块捕获
 throw new ultility.cxException.SqlErrorException("要执行的 SQL 有误");
      }

}


catch(ultility.cxException.SqlErrorException e)
{
    
throw new ultility.cxException.SqlErrorException(e.Message);//抛出一个新的 SqlErrorException
}

//这里我把出现 SqlException 就认为是连接不到数据库
//虽然它可能是最先发生的,但要放到最后,至于为什么 MSDN 中有解释
catch(SqlException e)
{
throw new ultility.cxException.NotConnectionException("连接数据库失败!");
}

finally
{
conn.Close();
conn.Dispose();    
}


3.这样我在客户端使用时 test() 方法时:


try
{
  test();
}


//捕捉到 执行SQL错误 的异常
catch(ultility.cxException.SqlErrorException e)
{
  MessageBox.Show(e.Message); 
//给出友好提示
}


//捕捉到 连接数据库失败 的异常
catch(ultility.cxException.NotConnectionException e)
{
MessageBox.Show(e.Message);
//给出友好提示
}

以上是我今天才注意到的对异常错误机制的一点点认识,肯定存在很多不成熟的地方
希望大家能提出更加成熟的异常错误机制进行学习、讨论,谢谢。

posted on 2005-02-22 23:54  erquan  阅读(2009)  评论(1编辑  收藏  举报