您的位置:首页 > 数据库

关于异常处理的注意事项一:throw exception(SQLiteDB 异常信息)

2011-07-21 11:23 260 查看
在代码中有一些问题经常会用到异常处理,如数据库、文件、网络的调用中,都会关注到一些特殊的问题处理,那么就会用到异常的关注。

今天主要关注异常的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:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: