C#自定义异常处理类2【转载】

转载 2012年03月27日 14:48:44

首先我们建立自己的异常类CustomException,它要继承自ApplicationException类(这是一个在发生非致命的应用程序错误时抛出的通用异常,它又继承于更为通用的Exception类),将其用作为应用程序定义的任何自定义异常的基类。通过这个基类,我们就可以编写一个通用的catch代码块,捕获应用程序定义的任何自定义异常类型。

自定义的异常类型可以在这中间扮演一个非常重要的角色。我们可以捕获一个通用的异常,识别它和应用程序的关系,然后把它作为特定于应用程序的异常再次抛出,以便能适当地处理它。

这里构建了一个简单的场景,使用Northwind数据库,向其中添加一条Customer记录,如果ID重复则抛出相应的异常信息。

(1) 定义我们的基础异常类

   

public class CustomException:ApplicationException

{

        public CustomException()

        {

        }

        public CustomException(string message, Exception inner):base(message,inner)

        {

        }

}

定义两个处理异常的方法,使用base关键字让CustomException方法继承自基本的错误异常类ApplicationException并提供了两个参数,一个异常消息参数和一个异常错误类。

(2) 然后我们再定一个处理我们不同自定义错误类型的错误处理类,不同的应用程序异常类型使用不同的异常处理类。

  

public class DuplicateCustomerIDException : CustomException

{
        public DuplicateCustomerIDException()

        {

        }
        public DuplicateCustomerIDException(string message, Exception inner):base(message,inner)

        {

        }
}

当出现相应类型的异常时,在这个自定义异常处理中可以在出现错误的时候做一系列的处理,然后再抛出异常信息,例如:记录错误日志,或者做容错处理等。

(3) 最后我们在添加客户记录的时候,使用我们自定义的异常

       

private void AddCustomerRecord()

{

            SqlConnection cn = new SqlConnection(DBConn);

            cn.Open();

            try

            {

                SqlCommand com = new SqlCommand("Insert Into Customers (CustomerID,CompanyName,ContactName) Values ('"+ftxt_CustomerID.Text+"','"+ftxt_CompanyName.Text+"','"+ftxt_ContactName.Text+"')",cn);

                com.ExecuteNonQuery();

            }

            catch(SqlException ex)

            {

                if(ex.Number == 2627)

                {

                    throw new DuplicateCustomerIDException("CustomerID重复",ex);

                }

                else

                {

                    MessageBox.Show("成功","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly);

                }

            }

            finally

            {

                cn.Close();

            }

     }

其中的ex.Number == 2627就是由于数据表中主键重复不能添加重复主键的记录时抛出的异常号码,如果异常类型符合怎抛出我们自定义的异常处理类。

(4) 最后我们在调用这个方法时,编写代码捕获这个我们自定义类型的异常

     

private void fbtn_Submit_Click(object sender, System.EventArgs e)

{

            try

            {

                AddCustomerRecord();

            }

            catch(DuplicateCustomerIDException ex)

            {

                MessageBox.Show(ex.Message);

            }

}


C#自定义异常处理类1【转载】

//自定义异常处理类 using System; using System.Diagnostics; namespace MyAppException {  /// <summar...

C#自定义异常处理

using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; nam...

C++ /python/java /C# 自定义异常处理

http://www.runoob.com/ C++ 实例 finally 标准C++没有。 您可以通过继承和重载 exception 类来定义新的异常。下面的实例演示了如何使用 std::excep...

VS自定义异常处理窗口

  • 2017年07月17日 12:11
  • 37KB
  • 下载

struts2的自定义类型转换和异常处理

action数据类型封装中自定义类型转换。

Java自定义异常处理

  • 2012年06月27日 11:39
  • 141KB
  • 下载

Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志

在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法),发现出现异常时,log4j无法在控制台输出错误日志。因此需要自定义一...

源码-Oracle数据库管理-第十六章-异常处理机制-Part 2(自定义异常)

调试心得:Oracle技术要不断提高,就得不断的做任务、实践、玩数据。 调试的过程中,又发现很多新的东西,真是“于无声处惊春雷”啊 --16.2 自定义异常 --16.2.1 异常声明 --16....

JAVA学习笔记26——异常机制2:常见异常+异常处理其余两种方法+自定义异常

最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。 本篇将异常剩余的基础内容介绍完毕。 上一篇笔记写的时候漏掉了一个内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#自定义异常处理类2【转载】
举报原因:
原因补充:

(最多只允许输入30个字)