ADO.net程序异常问题
程序异常问题
为什么要进行异常处理
程序因为各种原因出现问题导致的结果是程序直接崩溃,结果和开发过程出现的问题结果大不一样。因此需要使用异常的处理来防止软件系统崩溃
程序中的安全隐患
- 网络故障导致数据库连接问题
- 用户的非法操作(数据验证失败)
- 数据处理中的任何意外(例如:查询超时,资源文件丢失等)
- ……
了解异常类Exception
.NET Framework中的异常的设计结构
常见的异常类
与参数有关的异常
此类异常类均派生自SystemException,用于方法成员传递参数时发生的异常
- ArgumentException:用于处理参数无效的异常
- FormatException:用于处理参数格式错误的异常
与数组有关的异常
此类异常类均派生自SystemException
- IndexOutOfRangeException:用于处理索引超出数组长度所引发的异常
- ArrayTypeMismatchException:用于处理数组中存储数据类型不正确的元素所引发的异常
与IO有关的异常
- IOException:用于处理进行文件输入输出操作时所引发的异常
与内存溢出有关的异常
OverFlowException:用于处理程序逻辑错误造成的死循环异常
与算术有关的异常
ArithmeticException:用于处理与算术有关的异常,比如0作为除数
与数据库操作有关的异常
- DbException:用于处理所有数据源操作异常类的基类
- SqlException:用于处理针对SQL数据源的异常,比如数据库连接错误
处理异常的常用方法
异常处理的形式
- 即时处理:发现异常后随时处理并恢复程序
- 抛出异常:捕获异常后,重新封装异常信息或直接抛给调用者
编写异常处理的原则
在任何可能会发生异常的地方进行添加异常处理的方法
异常对象提供的重要信息
属性名称 | 说明 |
---|---|
Source | 此属性表示导致异常发生的应用程序或对象的名称 |
Message | 提供引发异常的详细描述信息 |
StackTrace | 提供在堆栈上所调用方法的详细信息,并首先显示最近调用的方法 |
使用Try-catch捕获和处理
- Try中放可能会出现异常的代码
- catch中表示如果try中的代码出现了异常则会直接进入到catch中执行
- 无论是否try中的代码会不会发生异常,最终都会执行finally中的代码
- finally不是必须的模块
异常传递与自定义方法
异常处理和日常工作一样
- “底层方法”将第一次捕获的异常传递给上级调用者进一步详细处理
- “中层调用者”可以用多路捕获异常并封装详细异常信息
- “顶层调用者”即在用户界面中继续处理异常
相当于:
顶层调用者是客户-出现异常只需要告诉客户可能操作未成功的人性化原因描述
中层调用者-程序的开发人员,在开发程序时对于可能发生的异常进行初步处理
底层方法-维护人员,将异常的详细信息汇报,并进行异常处理