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

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

   

转载于:https://www.cnblogs.com/liuj/archive/2012/09/05/2671906.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)

文章目录回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression)三、多项式回归(Polynomial Regression)四、逐步回归(Stepwise Regression)五、岭回归(Ridge Regression)六、套索回归(Lasso Regression)七、回归(ElasticNet)如何正确选择回…

LeetCode MySQL 1511. Customer Order Frequency

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | country | varchar | ------------------------ customer_id is the p…

LeetCode MySQL 1075. 项目员工 I

文章目录1. 题目2. 解题1. 题目 项目表 Project&#xff1a; ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- 主键为 (project_id, employee_id)。 employee_id 是员…

The Shapes of CSS

http://home.cnblogs.com/blog/转载于:https://www.cnblogs.com/yanyanhappy/archive/2012/09/07/2675050.html

数据分析-书籍整理(一)

入门书籍 《谁说菜鸟不会数据分析》讲解了一些常见的分析技巧&#xff0c;并附带 Excel 的一些知识以及职场可使用的基础数据分析。 《MYSQL必知必会》对于有sql基础的人来说&#xff0c;可以快速复习知识点&#xff0c;小白也能学习到很多&#xff0c;不会打击自信心。我是用…

hdu 1054 Strategic Game 最小点覆盖 = 最大二分匹配

题目地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1054 简单二分匹配&#xff0c;根据题意构造一个无向图。然后求最小点覆盖&#xff0c;然后扫描mark数组将曾经匹配的点所匹配的边消去。 最小点覆盖 最大二分匹配 #include<stdio.h> #include<strin…

数据分析统计学基础一

文章目录数据分析方法分类1、单纯的数据加工方法2、基于数理统计的数据分析方法3、基于数据挖掘的数据分析方法4、基于大数据的数据分析方法描述性统计分析1、数据的计量尺度2、数据的集中趋势3、数据的离中趋势4、数据分布的测定正态分布a. 偏态系数b. 数据峰度c. 偏度与峰度的…

LeetCode MySQL 1435. 制作会话柱状图

文章目录1. 题目2. 解题1. 题目 表&#xff1a;Sessions ------------------------------ | Column Name | Type | ------------------------------ | session_id | int | | duration | int | ------------------------------ sessio…

SharePoint2010网站备份还原简单介绍

今天尝试了SharePoint2010网站的备份和还原&#xff0c;从网上搜一些文档看看&#xff0c;然后自己试试&#xff0c;感觉和2007的操作没什么太大的区别&#xff0c;跟大家分享下自己尝试的命令行方式和数据库的方式&#xff0c;2007自己常用的也是这两种方式。 1、 命令行的方式…

LeetCode MySQL 1211. 查询结果的质量和占比

文章目录1. 题目2. 解题1. 题目 查询表 Queries&#xff1a; ---------------------- | Column Name | Type | ---------------------- | query_name | varchar | | result | varchar | | position | int | | rating | int | ---------------------…

数据分析方法-聚类算法

文章目录一、定义二、聚类、分类区别分类三、聚类常用算法1.划分聚类 k-means、k-medoids、k-modes、k-medians、kernel k-means2.层次聚类 Agglomerative 、divisive、BIRCH、ROCK、Chameleon3.密度聚类 DBSCAN、OPTICS5.模型聚类 GMM6.图聚类 Spectral Clustering&#xff08…

Java6 WebService学习

参考了网络上中资料&#xff0c;自己学习实践了一个Java6 WebService. 首先&#xff0c;建立一个WebService: package garfield;import javax.jws.WebService;import javax.xml.ws.Endpoint;WebServicepublic class MyJ6WebService {public String SayHello(String strName) {r…

公司人员离职情况分析及预测(工具:python)

前言 目前社会上呈现出一种公司招不到人&#xff0c;大批失业人员的矛盾现象&#xff0c;且大部分公司的离职率居高不下&#xff0c;很多入职没多久就辞职&#xff0c;所花费的培训招聘等资源都浪费了。为了弄清楚公司员工离职原因&#xff0c;通过kaggle上某一家企业员工离职…

LeetCode MySQL 1241. 每个帖子的评论数

文章目录1. 题目2. 解题1. 题目 表 Submissions 结构如下&#xff1a; ------------------------- | 列名 | 类型 | ------------------------- | sub_id | int | | parent_id | int | ------------------------- 上表没有主键, 所以可能…

MYSQL快速导入大量数据

创建数据表&#xff0c;并导入 1.根据数据特征建表&#xff0c;create语句 2.语句导入数据 LOAD DATA INFILE D:/UsersBehavior.csv INTO TABLE users CHARACTER SET utf8 FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY " ESCAPED BY " LINES TERMINATE…

新浪微博数据网络舆情分析客户端软件

这是我们北邮某实验室完全自主开发的数据挖掘和分析软件&#xff0c;用于处理海量数据&#xff0c;建立从数据采集&#xff0c;整理&#xff0c;分析&#xff0c;可视化&#xff0c;存储的全部服务。目前程序正在不断开发中。将在后期发布其测试版本。 转载于:https://www.cnbl…

LeetCode MySQL 1141. 查询近30天活跃用户数

文章目录1. 题目2. 解题1. 题目 活动记录表&#xff1a;Activity ------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | ---…

MYSQL错误: ERROR 1205: Lock wait timeout exceeded(处理MYSQL锁等待)解决办法

在运行数据库某一语句的时候&#xff08;数据量大概有一亿条&#xff09;&#xff0c;运行的特别慢&#xff0c;可能是我自己电脑配置不高&#xff0c;因此想删选一些数据但是运行的时候报1205错误。 原因 有会话执行过DML操作&#xff0c;然后没commit提交&#xff0c;再执行…

(jquery插件)打造百分比动态色彩条

以前没写过jquery插件&#xff0c;在开发这个时&#xff0c;写一下代码&#xff0c;又看一下jquery插件的定义&#xff08;如何开发之类的东东&#xff09;&#xff0c;来来去去的。 之所以要写这个插件&#xff0c;主要是为了往后的项目中方便实现这类型的功能&#xff0c;在之…

LeetCode MySQL 1517. Find Users With Valid E-Mails(正则表达式)

文章目录1. 题目2. 解题1. 题目 Table: Users ------------------------ | Column Name | Type | ------------------------ | user_id | int | | name | varchar | | mail | varchar | ------------------------user_id is the primary ke…