AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...
数据库访问各种规模的应用程序不可避免的操作,.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="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
后期计划:使AliasDB支持联合主键、外键和事务操作。
转载于:https://www.cnblogs.com/liuj/archive/2012/09/05/2671906.html
AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...相关推荐
- 求职知识整理一(前后端分离,前端模式,数据库知识点:sql,MySQL,Oracle,jdbc)
目录 今日事: 1.前后端分离(常见的是前端写静态页面,后端套用模板) 2.前端开发中的MVC/MVP/MVVM模式 一.数据库(MySql,Oracle,SQL Server)(基本的数据库操作语句 ...
- 数据库访问的弹性化---WebLogic和Oracle RAC的整合:Active GridLink
1. 什么是Active GridLink Data Source 从Oracle WebLogic Server 10.3.4版本开始引进了一种单数据源实现来支持Oracle RAC集群. ...
- Python数据库访问之SQLite3、Mysql
现有的数据库管理系统有很多种,本文选择介绍两种DBMS:SQLite 3 和 Mysql. SQLite 3 SQLite 3是Python 3预装的.相当完备.无需配置的基于SQL的数据库管理系统. ...
- mysql数据库访问问题吗_#MySQL数据库无法远程访问的问题
在 Ubuntu上装了mysql,因为项目的数据库是mysql,将项目放在tomcat里面webapp下面,一直启动不成功.本来一直以为是jdbc驱动问题,后来发现不是. 1.cd /etc/mysq ...
- mysql数据库目标库_修改mysql数据库的库名
假如源数据库名称为"srcdb",目标数据库名称为trgdb 首先创建目标数据库: create database trgdb; 查看源数据库中的所有表名: use informa ...
- 简单理解什么是数据库CDC?(以mysql为例)
一.数据库CDC是什么 CDC 是change data capture,即变化数据捕捉.是数据库进行备份的一种方式,常用于大量数据的备份工作.分为入侵式的和非入侵式的备份方法,入侵式的有基于触发器备 ...
- 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等.如果 SQL 语句性能 ...
- 查看数据库(表)的大小(Mysql和Oracle)
言简意赅: Mysql数据库 1.进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2.查询mysql数据库的大小: sel ...
- 成熟的软件组件都是老板用大把、大把的钱堆出来烧出来的,以最简单的数据库访问组件为例...
为什么80%的码农都做不了架构师?>>> 自己虽然不属于技术强的那类人物,但算是勤奋用功"刨根问底"类型的,总喜欢把一个东西研究个透彻的那种,否则心里不踏实 ...
最新文章
- c语言函数库学习~sscanf~格式化输入
- android怎么写本地图片,Android 开发图片保存在本地
- 《Windows 8 权威指南》——1.5 版本对比
- python创造订单_Odoo 10根据销售订单创建项目
- python用format保留三位小数_关于Python 保留小数使用format、%、round()、Decimal函数及format和%只能保留到六位问题...
- 怎样删去csv中重复行_4个锦囊,祝你快速删去Excel中的重复数据
- 使用pdb调试Python程序
- python pdf表格识别不出来_Python识别pdf表格
- 一个CSS3滤镜Drop-shadow阴影效果
- softmax分类算法原理(用python实现)
- 获取当前ip_write_ip_tcl命令你用过吗?
- Socket.io:有点意思
- 苹果电风扇软件Macs Fan Control Pro安装教程
- 2022爱分析・汽车行业数字化实践报告
- 使用WebGL和JavaScript构建地球
- Linux下使用和配置magick
- python读取海康视频流(rtsp格式)
- 华为软开云4--玩转流水线
- 解决方案:Zotero+坚果云+Zotfile完成多平台多设备的文献同步
- android 播放 优酷视频
热门文章
- python3基础3--数据类型--数据运算--表达式if -else-while-for
- 云计算构建基石之Hyper-V:虚拟机管理
- web.xml(8)_jsp-config
- “云计算”越来越重要 但更重要的是“云安全”
- Angular属性型指令
- Mocha 和 Chai 入门初探
- 局域网内连接MySQL
- Linux内核源代码分析-目录
- 关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”
- Windows Mobile开发资源相关下载收录