AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统

jopen 12年前

   数据库访问各种规模的应用程序不可避免的操作,.NET对提供了简单方便统一的数据库访问类,并且通过Enterprise Lib提供了更为顶层的数据库访问库。在我的人个工作中,现在用得最多的就是通过“动码代码生成器”对一次性生成数据库访问接口(DAL),数据工厂(DBFactory)和模型实体(Model),确实带来了许多方便。但是使用这种结构的数据库访问层有一个有很有局限性,那就是当你数据库结构改变了过后,不得不再一次重新生成上述模块。当然我们可以用ORM(比如NH组件)实现 对象-模型的映射,通过修改配置文件来自适应这种变化。但是现在AliasDB提供了一种更加灵活自由的方式来访问你的数据库,通常只需配置连接字符串就可以完成基本(注意前期还只有基本的CURD功能)的数据访问功能,但这样通常对中小型系统,Demo,测试程序十分的有用。

  首先需要说明的是,AliasDB引用了一个通用的数据库访问组件Maticsoft.DBUtility.dll 并修改了在此源码的基础上增加了部分方法(Maticsoft.DBUtility代码主页:http://code.google.com/p/my-project-membership/)

   1.AliasDB的特性

   AliasDB适用于 中小型系统,Demo,测试程序,特别是快速开发的应用程序。他提供针对MSSQL/MySQL/SQLite/Oracle数据库的访问方法,并用通过ODBC/OleDb支持另外的数据库(比如Access等)。使用AliasDB的最大好处就是通过引入AliasDB,我们可以少几行代码就实现数据库的增删改查。

   2.AliasDB的结构  

   (1)Model类

Model是继承自Dictionary<string,object>的一个字典,它是可以代码数据库里任意一张表的一行,其它列名就是Model的键值,数据库的值就是Model的值。通过这个松散的方式,用户可以减少数据库实体的编写工作。当然,这要求您得记住数据库里列名是什么并且代表什么意思。可解释的数据库列名也显得非常重要。

   (2) Maticsoft.DBUtility库(已内置到AliasDB中)

Maticsoft.DBUtility提供的DbHelperSQL/DbHelperMySQL/DbHelperOracle /DbHelperSQLite/DbHelperOleDb等DbHelper类来帮助我们更好的访问相应的数据库。我在此基础上增加了 DbHelperODBC类,与其Helper类完全类似。
  (3) DataAccess

所有的 DataAccess类均继承自DataAccessBase类,所有的 DataAccess在实例化时会传入一个字符串做为构造函数,他是当前要访问的数据表的表名,然后DataAccess在初始化时会将这个表的所有字段名和主键名找出来并放到内部变量中,当进行数据操作时,再将这些字符名与SQL 语句进行拼接,通过Maticsoft.DBUtility完成数据库操作。

       所以AliasDB能实现自适应数据表结构的原因是,它在每一次实例化时会动态地读取数据库的结构(当前只有列名和主键),再动态的拼接数据库。当然这也决定了AliasDB只适合于小型/简单的数据库,并且非常有效。 

   2.如何使用AliasDB

 (1)引用AliasDB.dll(命名空间:Net.Superliujian.AliasDB)

 (2)在app.config/web.config中的appSettings节点配置参数

   <appSettings>      <add key="ConnectionString" value=""/>      <add key="TablePrefix" value=""/>    </appSettings>

 ConnectionString表示连接字符串,TablePrefix表示数据表的前缀,可以为空

(3)假设现在访问Access数据库的test_db中的test_table表。那么配置好连接字符串,TablePrefix可以配置成test_,使用以下方式

DataAccessOleDb da = new DataAccessOleDb("table");//TablePrex=test_,所以会访问test_table表              //或者  DataAccessOleDb da = new DataAccessOleDb("test_table");//TablePrex="",                da.Exists(id);//主键为ID的数据是否存在                da.Update(Model m);//更新一行数据                da.Insert(Model m);//增加一行数据                da.InsertOrUpdate(Model m);//更新或增加一行数据                da.Delete(id);//删除主键为ID的数据                da.DeleteList(id1,di2...);//批量删除                da.GetAllList();//得到所有数据,返回List<Model>                da.GetAllListDataSet();//得到所有数据,返回DataSet                da.GetList(string fields,string where);//Select,比如da.GetList("id,name","name='superliujian'")                da.GetListDataSet(string fields,string where);//Select                  da.GetListByPage(string where,string order,int startIndex,int pageSize);//得到分页数据(通过Limit)

   4.AliasDB的局限性 

(1)暂时只支持一个主键的数据表(多个联合主键不支持)

        (2)用户需要记住列名

        (3) 只提供基本操作,暂不支持事务

        (4)Model是动态的,不是强类型(这算优点也算缺点吧)

 

  总结:

AliasDB总的来说对于中小程序,特别是数据库比较单一的程序是特别有效的,通常不需要做任何的设置就可以轻松完成数据库访问工作。虽然不适合开发商用 系统 ,但是在平明的Demo,测试等环境下有很高的开发效率,能为我们节约很多的时间。

      AliasDB现已在GitHub上托管并开源,有兴趣可以访问:https://github.com/superliujian/AliasDB