CYQ.Data 轻量数据访问层(一) 概述

在很久很久以前。2007年底,我曾发布过CYQ.Data.DLL,那时的学术氛围很浓,评论的也比较重

在那里,我曾做过一些简介与使用方法的帮助

在这个系列中,我将一步一步开源并讲解实现的过程,由于文章进行编辑,日期变了

以前旧文章地址为:http://www.cnblogs.com/cyq1162/archive/2009/11/05/968626.html

 

这里先简单介绍一下数据访问层的大体结构:

这里先上一张主要的图:

该访问层主要分三类:

一.自定义Table

1.自定义实现轻量级MDataTable,并实现IDataReader接口,以便可以直接绑定到DataGrid,Repeater等控件

主要数据包括

自定义数据单元格:MDataCell

自定义数据数据列集合:MDataColumns

自定义数据行:MDataRecord,继承并实现IDataRecord,以后在控件后台可以实现类型转换,并实现与MDataRow的隐式转换

2.数据主操作MDataRow,实现动态构建数据库表架构,并缓存表架构,同时实现数据的增删改查

MDataResult是枚举,返回为MDataRow操作的结果类型

二.自定义的Sql

1.主要自已简化的SQLHelper,并结构Log记录出错异常

DataType主要是数据库类型和C#类型之间的转换

ProcedureSql主要是一些存储过程,可以实现读取数据库表架构及相应的分页存储过程

OutPutData主要是提供生成数据库的表与视图与字段,会以枚举的形式存在,本数据方问层,会以枚举替代实体类的存在

三,Cache类

主要是缓存相应的表架构

--------------------------------------

说明,在接下来的讲解实例中,可能涉及到类的更名与移除

并会优化同时也会去掉一些多余的代码与函数

所以,本人会新建一个新的项目,重新写一次最新的项目,并提供下载

关于功能的可能更新,如下面的操作:

 

MDataRow mdr=new MDataRow(Table.Users);//Table.V_Users

mdr[Users.UserName].Value='cyq';

mdr.Update("id=1");

mdr.Close();

在这个示例中,如果Users为数据库,则Users.UserName枚举会直接转成(int)Users.UserName进行索引查询

如果为V_Users或为多表查询的数据,则Users.UserName枚举会转成Users.UserName.ToString()进行遍历查询

1.关于多表查询中,不仅仅限于视图,也支持构建的联合查询表,如:

string usersTable="(select u.* from users u left join topic t on u.id=t.uid) v_users";

MDataRow mdr=new MDataRow(usersTable);

mdr[Users.UserName].Value='cyq';

mdr.Update("id=1");

mdr.Close();

 

时间: 2024-10-03 19:06:11

CYQ.Data 轻量数据访问层(一) 概述的相关文章

CYQ.Data 轻量数据访问层(二) 构造数据单元(上)

DataTable,你有多丰富: 轻轻的打开Reflector.exe,按下F3搜索,输入DataTable,双击定位,右键,Disassemble之后, 悄悄的点一下最下面的 Expand Methods,再从容的把它copy出来,我们才发现..6000多行的代码 我们常用的DataTable一个类,才用了6000多行代码实现,跟我们以前写的,一个类写到一千多,就觉得有点过了 大巫见小巫啊!     解析: 当然了,不是说一个类代码越多,性能就一定不好.至少我们还是那么多人前拥后挤的在继续使用

CYQ.Data 轻量数据访问层(三) 构造数据单元(下)

继上一节,回头看这张图片: 回顾上节的话题,怎么设计这样一个数据单元类?才不会有重复的单元表头,又能合理解释出数据与表头的关系? 经过长久的深思后..一个关键的字出来了"ref",引用,是的,用的这就个,如果每个单元格,都包括值和单元表头,而单元表头,都引用同一个的时候,就刚好满足了需求.     于是,我们开始写出这样的类: 先构造出一个存放值的类: /// <summary>     /// 只包函被填充的数据状态和值     /// </summary> 

CYQ.Data 轻量数据访问层(八) 自定义数据表实现绑定常用的数据控件(中)

继上一节之后,我们开始寻找绑定之法 先是一回想,我们平常是拿什么绑定到数据控件的:List<实体类>,DataTable,DataSet,DataView之类的, 而写法也就这么个样: xxxx.DataSource=List<实体类>....等 XXxx.DataBind(); 于是,我们就从这些东西入手了,要不然也措不着头脑该往哪儿找 DataSource这东西要给赋值,那我们打开reflector.exe看看这里面究竟有点什么东西先 按下F3,搜索Repeater,当然也可以

CYQ.Data 轻量数据访问层(六) 构造数据表

自从构成最小单元数据单元之后,之后的行与列头的类,都变的很容易写 表也是一样,所有行的集合,即为表,于是,我们也很容易写出表类 如下: public class MDataTable : List<MDataRow>    {        private string _TableName =string.Empty;        /// <summary>        /// 表名        /// </summary>        public stri

CYQ.Data 轻量数据访问层(四) 构造数据单元列

有了数据结构单元的结构类之后,数据单元列集合就得很容易写了,因为,所有的数据单元结构加起来,就成了数据单元列集合了 于是,我们很轻易的写出了以下类:    /// <summary>    /// 头列表集合    /// </summary>    public class MDataColumn : List<MDataCellStruct>    {        public MDataColumn()            : base()        { 

CYQ.Data 轻量数据访问层(五) 构造数据行

有了数据结构单元DataCell之后,数据单元行也就很容易写了,因为,所有的数据单元加起来,就成了数据行了 于是,我们很轻易的写出了以下类: /// <summary>    /// 一行数据    /// </summary>    public class MDataRow : List<MDataCell>    {        public MDataRow()            : base()        {        }        publ

CYQ.Data 轻量数据访问层(九) 自定义数据表实现绑定常用的数据控件(下)

还记得当初以为似找到:行数组Copy之后,再array.GetEnumerator();就可行.   实际操作之后,发现不可行,于是,这不可行的路就不写了,避免浪费大伙精力看了. 以下讲可行之路: 通过Reflector找到SqlDataReader类,因为它也是可绑定之一的数据源,虽然直拉绑定往往造成链接未关闭事件. 通过研究:   public class SqlDataReader : DbDataReader, IDataReader, IDisposable, IDataRecord

CYQ.Data 轻量数据访问层(七) 自定义数据表实现绑定常用的数据控件(上)

继上一节实现MDataTable之后,我们再为MDataTable加上一个NewRow()方法,以便能构造出该表的新行 如下:  public MDataRow NewRow()        {            MDataRow mdr = new MDataRow();            mdr.TableName = _TableName;            MDataCellStruct mdcStruct = null;            for (int i = 0

CYQ.Data 轻量数据层之路 自定义MDataTable绑定续章(七)

本章起,将续章讲解整框架当初的设计思路: 本章既为续章,说明我以前写过,是的,以前我写过内部整个MDataTable的构造,不过,当初匆匆写完后, 最后一步的实现MDataTable绑定GridView/DataList/Repeater还差一点,这章续上! 这里列出我以前写过的关于构造自定义MDataTable系列文章: 备注:以下内容为早期所写,文字少,代码多,有不明之处,欢迎在文章后面留言!   1:CYQ.Data 轻量数据访问层(二) 构造数据单元(上) 2:CYQ.Data 轻量数据