设为首页 收藏本站
查看: 890|回复: 0

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

[复制链接]

尚未签到

发表于 2015-6-2 12:33:22 | 显示全部楼层 |阅读模式
  数据库访问各种规模的应用程序不可避免的操作,.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的一个字典,它是可以代码数据库里任意一张表的一行,其它列名就是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节点配置参数

  

   
   
    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
            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

  后期计划:使AliasDB支持联合主键、外键和事务操作。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-73219-1-1.html 上篇帖子: 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracl 下篇帖子: Linq to MySql/Oracle/Postgres/Sqlite
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表