关于异常处理的注意事项一:throw exception(SQLiteDB 异常信息)
2011-07-21 11:23
260 查看
在代码中有一些问题经常会用到异常处理,如数据库、文件、网络的调用中,都会关注到一些特殊的问题处理,那么就会用到异常的关注。
今天主要关注异常的throw问题,如何在分层调用中理清各层之间的异常处理的职责,下面例举示例代码进行说明:
1、DAL层没有throw ex的情况:
DAL层try-catch :
conn.Close(); }
UI层就是最顶的try-catch:
try
{ cns_bll.UpdateComID(key);//提交更新数据库 } catch (Exception ex) { MessageBox.Show(ex.Message, "系统提示"); } 以上DAL层没有throw ex,则UI层永远也没捕获到异常的信息,所以UI层则失去对数据库调用的异常情况的监控;、
2、那么针对以上情况有两种解决方案:
1)、只在顶层添加异常处理try-catch;
2)、在底层只对容易发生异常的小块进行try-catch,而且在catch中只对特定的异常进行处理,并且为了上层能捕获这些异常信息,则要加throw ex语句。
DAL层try-catch:
}
conn.Close(); }
3、题外话题:今天在调试代码过程中,发现一个以前没有遇到过的SQLiteException异常:The database file is locked database is locked,先记录下,以后分析。
System.Data.SQLite.SQLiteException was caught
Message=The database file is locked database is locked Source=System.Data.SQLite ErrorCode=-2147467259 StackTrace: at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt) at System.Data.SQLite.SQLiteDataReader.NextResult() at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave) at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() at Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteNonQuery(DbCommand command) at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command) at SouthGIS.DAMS.ArchivesScan.DAL.CommonNameSettingDAL.UpdateComID(Int32 comID) in D:\DAMS_SVN\源码\Current\ArchivesScan\ScanPluginDAL\CommonNameSettingDAL.cs:line 155 InnerException:
今天主要关注异常的throw问题,如何在分层调用中理清各层之间的异常处理的职责,下面例举示例代码进行说明:
1、DAL层没有throw ex的情况:
DAL层try-catch :
using (DbConnection conn = db.CreateConnection())
{ conn.Open(); DbTransaction trans = conn.BeginTransaction(); try { ret = db.ExecuteNonQuery(dbCommand); trans.Commit(); } catch { trans.Rollback(); }conn.Close(); }
UI层就是最顶的try-catch:
try
{ cns_bll.UpdateComID(key);//提交更新数据库 } catch (Exception ex) { MessageBox.Show(ex.Message, "系统提示"); } 以上DAL层没有throw ex,则UI层永远也没捕获到异常的信息,所以UI层则失去对数据库调用的异常情况的监控;、
2、那么针对以上情况有两种解决方案:
1)、只在顶层添加异常处理try-catch;
2)、在底层只对容易发生异常的小块进行try-catch,而且在catch中只对特定的异常进行处理,并且为了上层能捕获这些异常信息,则要加throw ex语句。
DAL层try-catch:
using (DbConnection conn = db.CreateConnection())
{ conn.Open(); DbTransaction trans = conn.BeginTransaction(); try { ret = db.ExecuteNonQuery(dbCommand); trans.Commit(); } catch(SQLiteException ex) { trans.Rollback(); throw ex;}
conn.Close(); }
3、题外话题:今天在调试代码过程中,发现一个以前没有遇到过的SQLiteException异常:The database file is locked database is locked,先记录下,以后分析。
System.Data.SQLite.SQLiteException was caught
Message=The database file is locked database is locked Source=System.Data.SQLite ErrorCode=-2147467259 StackTrace: at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt) at System.Data.SQLite.SQLiteDataReader.NextResult() at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave) at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() at Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteNonQuery(DbCommand command) at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command) at SouthGIS.DAMS.ArchivesScan.DAL.CommonNameSettingDAL.UpdateComID(Int32 comID) in D:\DAMS_SVN\源码\Current\ArchivesScan\ScanPluginDAL\CommonNameSettingDAL.cs:line 155 InnerException:
相关文章推荐
- Ext JS 5 关于Store load返回json错误信息或异常的处理
- urllib异常处理中HTTPError和URLError混用的注意事项
- C++ 关于MFC多线程编程中的一些注意事项 及自定义消息的处理
- 关于Android.9图片的处理和注意事项
- 处理异常注意事项
- Outlook Express 使用过程中的注意事项及异常的处理方法
- .NET进行异常处理时的原则注意事项
- java中处理异常需要注意的事项
- java进行异常处理时的注意事项
- ASP.NET中异常处理的注意事项
- Java自学笔记(第十天)-异常-异常的处理-throws-throw-多异常处理-自定义异常-throwable类-RunTimeException类-finally-异常在方法继承中的注意事项-
- JAVA异常处理注意事项
- 关于jQuery load()方法加载页面后台发生异常而前台页面加载失败且没有任何展示信息的问题处理
- java异常处理的六个注意事项
- 关于在子类中重写父类的throws异常的方法的注意事项
- 关于SQLite中“其他信息: 未能加载文件或程序集“System.Data.SQLite, Version=1.0.81.0, Culture=neutral, PublicKeyToken=db“
- Java异常处理注意事项
- JAVA基础再回首(十九)——异常的概述、Try…Catch、多异常处理、Throws、throw、finally、自定义异常及异常的注意事项
- APP开发实战98-Android异常处理注意事项
- 关于IO流中异常的注意事项