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: 
  • 相关阅读:
    小程序mpvue使用scroll-view
    mysql之join浅析
    YApi-v1.9.2部署失败(Accessing non-existent property 'count' of module exports inside circular dependency)的解决方案
    YApi 可视化部署时遇到9090端口被占用时的解决方案
    [转载]最近涉及字符串列表存储,为加快检索速度,搜集了一些哈希函数,C语言的代码保存见内
    字符串的编码检测
    mbcs、unicode,UTF-8、UTF-16等的转换
    支持多重结构的配置信息读取代码,基于VS2008
    配置信息读取代码(VS2012编译通过,使用了C++11特性)
    [转载]TCPMP0.72RC1的编译与移植以及自己另外做UI完整方法
  • 原文地址:https://www.cnblogs.com/liyanggzy/p/2112587.html
Copyright © 2011-2022 走看看