zoukankan      html  css  js  c++  java
  • 关于异常处理的注意事项一:throw exception(SQLiteDB 异常信息)

           在代码中有一些问题经常会用到异常处理,如数据库、文件、网络的调用中,都会关注到一些特殊的问题处理,那么就会用到异常的关注。

    今天主要关注异常的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: 
  • 相关阅读:
    MySQL 连接的使用:语法及案例剖析、INNER JOIN、LEFT JOIN、RIGHT JOIN
    MySQL GROUP BY 分组语句:语法及案例剖析、使用 WITH ROLLUP
    MySQL 排序:语法及案例剖析、在命令提示符中使用 ORDER BY 子句
    MySQL UNION 操作符:语法及案例剖析
    MySQL LIKE 子句:语法及案例剖析、在命令提示符中使用 LIKE 子句
    maven仓库
    maven安装配置
    Jedis
    Redis下载安装以及String类型
    Redis介绍
  • 原文地址:https://www.cnblogs.com/liyanggzy/p/2112587.html
Copyright © 2011-2022 走看看