在很久很久以前。2007年底,我曾发布过cyq.data.dll,那时的学术氛围很浓,评论的也比较重
在那里,我曾做过一些简介与使用方法的帮助
在这个系列中,我将一步一步开源并讲解实现的过程,由于文章进行编辑,日期变了
这里先简单介绍一下数据访问层的大体结构:
这里先上一张主要的图:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLhRXYk5Sc5N2Xv9CX1YTM3EjMvwlM2ETMxl3YvwVbvN2Xzd2bsJmbj9CXt92YuM3ZvxmYuNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.jpg)
该访问层主要分三类:
一.自定义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);