zoukankan      html  css  js  c++  java
  • 分页解决方案 之 数据访问函数库——另类的思路、另类的写法,造就了不一样的发展道路。

        上一篇:分页解决方案 —— GridView + QuickPager + QuickPager_SQL + DataAccessLibrary + 数据库  

        如何访问数据库?一个老掉牙的问题,方法多了去了,什么直接使用ado.net、使用SQLHelp、使用微软的企业库、使用ORM、使用LinQ to SQL等等,还可以使用自己封装的函数库,这里我就想说一下我的数据访问函数库的使用方法。

     

        您可能会说了,这么简单的东东还用说吗,重复制作轮子有意义吗?这个嘛,个人有个人的看法了,我也不多说了,先看使用方法吧。

     

         忘记说了,我的数据访问函数库不是静态的,所以需要先实例化。

    DataAccessLibrary dal = DALFactory.CreateDAL();

    1、删除一条数据,不使用事务

     

    protected void Btn_Del_Click(object sender, EventArgs e)
            
    {
                
    //不用事务,直接删除数据
                string sql = "delete from News_NewsInfo where newsID = 18 ";
                
                
    //执行SQL语句
                dal.ExecuteNonQuery(sql);

                
    判断是否出现异常 和 是否真的删除了一条数据

            }

     

    2、删除多条数据,使用事务

     

    protected void Btn_DelMore_Click(object sender, EventArgs e)
            
    {
                
    //使用事务,删除多个表里面的数据

                
    //开启一个事务
                dal.TranManager.TranBegin();
     
                
    string sql = "delete from News_NewsInfo where newsID = 13 ";

                
    //执行SQL语句
                dal.ExecuteNonQuery(sql);

                
    判断是否出现异常 和 是否真的删除了一条数据

                sql 
    = "delete from News_NewsInfo where newsID = 14  ";
                
    //执行SQL语句
                dal.ExecuteNonQuery(sql);

                
    判断是否出现异常 和 是否真的删除了一条数据

                
    //可以继续执行其他的操作,不仅仅是删除语句,insert、Update语句都可以执行。
                
    //执行之后都要进行判断

                
    //所有的操作都正确执行完毕之后,需要提交事务
                dal.TranManager.TranCommit();

                
    //注意,事务不支持嵌套!

                
            }

     

    3、使用参数化SQL语句添加数据

     

    参数化SQL语句的方式添加数据

     

    4、使用储存过程添加数据

     

                存储过程的方式添加数据

     

    5、使用参数化SQL语句修改数据

     

                参数化SQL语句的方式修改数据

     

    6、使用储存过程修改数据

     

               存储过程的方式修改数据

     

     

           获取数据

     

     

        数据访问函数库的特点

    1支持多种数据库。基于ado.net2.0 ,使用System.Data.Common.DbProviderFactory 来实现。

    2调用方便、简捷。一般一行语句即可搞定。

    3、对事务、储存过程的参数进行了封装,以达到简单好用的目的。

    4、可以在内部拼接参数化的SQL语句,省去了在外部写参数化的SQL语句的烦恼。

    5使用一个属性来代替异常处理,只需要检查这个属性值,即可知道是否发生异常。

    6、产生异常的时候会记录下SQL语句(或者储存过程的名称)、错误描述、时间、网页即URL参数,以便于调试、修改错误。

     

    这些代码应该写在哪一层?

        从语法的角度来讲,写在哪一层都可以通过编译。从流行的角度来讲呢,应该写在数据层。从我个人的角度来说呢,我是直接写在了aspx.cs文件里了,为什么要这么做呢?方便!

        另一个原因就是——我不知道要怎么分?不都写在aspx.cs文件里面写在哪呢?建立一个.cs文件,美其名曰“数据层”,写一个函数,把代码拷贝进去。然后在建立一个.cs文件,美其名曰“业务逻辑层”,再在这里调用刚写的那个函数,最后在.aspx.cs文件里面调用?这可就是纯粹为了分层而分层了。我觉得没有必要,呵呵。

        另外,就是这个操作习惯上的差别,让我走到了和主流不一样的道路!至少到目前为止,我还是觉得我的这个方向是没有错误的。

    Ps:

        我的思路有一点另类,我的目的就是外部调用的时候一定要简单,不必要的“啰嗦”一定要去掉,而数据访问函数库的内部代码可以多一点,函数的功能可以细致一些(比如获取数据的地方,设置了好几个函数)。

        使用SQLHelp的时候,为什么要在外部实例化一个connection?为什么要在外部建立储存过程的参数?这么麻烦,为什么不能把这些都封装进去呢?所以我把这些都封装进去了。

     

    变与不变

      neverlost 写的 2条路 代码生成 or 配置 》里有人问:“数据库字段修改了, sql 存储过程的参数修改了····如何通过你的说的可配置部分维护?”。我估计我们的思路应该差不多。

     

        

    我说一下我的想法。就以上面的例子举例。假设News_NewsInfo表里面的“Title”字段想要改名,改成“NewsTitle”,那么我的代码要怎么改呢?

    我只需要把

      dal.ParameterManager.AddNewInParameter("@Title", "参数化SQL语句的标题", 50);

    改成

      dal.ParameterManager.AddNewInParameter("@NewsTitle", "参数化SQL语句的标题", 50);

    就可以了,那么本质上我修改了什么呢?我修改了一个字符串的值!

        函数本身是不变的,变化的是参数值,就是那个字符串,就是那个字段名。不知道说道这里您有答案了没?就是说我可以把表名、字段名放在“配置”里面,用的时候读取出来,给函数的参数赋值,这样当字段名变化的时候,我只需要修改“配置”里的信息就可以了,不需要修改代码。

      您可能会问了,修改代码里的字符串是修改,修改“配置”也是修改,后者有什么优势吗?优势那可就大了。留一个想象的空间吧,暂时先不说了。

     

     源代码下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html

  • 相关阅读:
    go基础_定时器
    作业3:写一个测试程序,消耗固定内存
    Hdu3397Sequence operation线段树
    Hdu3308LCIS线段树
    Poj3667Hotel线段树
    Poj1436Horizontally Visible Segments线段树
    Poj3225Help with Intervals区间线段树
    Poj2528Mayor's posters线段树
    poj3468A Simple Problem with Integers区间和线段树
    Hdu1698Just a Hook线段树区间更新
  • 原文地址:https://www.cnblogs.com/jyk/p/1452035.html
Copyright © 2011-2022 走看看