轻松搞定数据访问层1

转载 2004年09月07日 08:25:00
 轻松搞定数据访问层     yuhonglai [原作]

下面实现的方法,可以把你从SQL的Add,Delete,Update,Select的重复劳动解脱出来

1。实体类
2。访问类

现在以下表为例
tblPerson
(perID,perName,perGender,perOld,perNation)

实体类
Person
---------
ID
Name
Gender
Old
Nation

访问基类
DataOper
------------
Shared Delete
Shared Add
Shared Update
Shared Select

访问类
PersonOper:DataOper
--------------------
Shared GetAll
Shared GetPersonByID
Shared GetPersonByName
Shared Get......

将数据库表的信息导入到DB.XML文件中
根据DB.XML文件生成实体类
例如上面的tblPerson表对应的DB.XML中的一个表如下
Name   DBName   Key   Seed    Type
--------------------------------------
ID        perID         1        1          Integer
Name   perName    0        0          String
Gender perGender  0        0          boolean
Old       perOld       0        0          Integer
Nation  perNation   0        0          String

将从数据库返回的DataSet转换成实体类,如果用一般方式写的话:
ds=cmd.Execute("select * from tblPerson where ID=1")
dim p as new Person
p.ID=Ctype(ds.Tables(0).Rows(0).Item("perID"),Integer)
p.Name=...
p.Gender=...
p.Old=...
p.Nation=...
一张表的转换还好办,那么如果又几十张表效率显得地下了

这里又另外一种通用的方法,利用.NET提供的反射功能!
.NET提供的反射功能可以在知道类方法或属性的名称的情况下,动态访问类的方法。
知道怎么做了吗?
前面我们有一个从数据库对应的DB.XML数据库架构文件
这个文件和实体类的字段一一对应
所以我们只要遍历这个架构文件,利用反射,就能轻松实现上述的赋值了
让我们再看看访问基类
DataOper
--------------
Delete(o as Object)
Add(o as Object)
Update(o as Object)

选择Add(o as Object)为例说明
public sub Add(o as Object)
    Dim Type as String=O.GetType.ToString ' 得到传进来的对象的类型
    ... ' 对象类型的字符串和刚才那个XML架构文件中表的名称一一映射
    Dim SchemaTableName as String=GetSchemaTableName(Type) ' 取得需要操作的表的名称 及从 Person->tblPerson
    ' 打开数据库架构文件
    Dim dsSchema as new Dataset("DB.XML")
   
    Dim SQL as String="Insert into " & SchemaTableName
    Dim r as DataRow
    For Each r in dsSchema.Tables(SchemaTableName)
        ' 在这里操作上面的SQL语句,值的部分利用反射从o中取得,建议写一个专门身成特定对象特定操作的SQL语句的类
        ' 处理一些特殊情况,如主键,自动增加值字段等
        ' 如果在数据库架构文件中存储更多的架构信息,如最大值等,还可以完成一些数据验证之类的操作
 ...
    Next
    SQLHelper.Excute(ConnectionString,...Text,SQL)
end sub

Delete/Update的通用方法类似

这样,如果你要添加一个Person的话可以这样
Dim p as New Person
p.Name="HahaSoft"
p.Gender=1
p.Old=20
...
PersonOper.Add(p) ' 从DataOper继承的方法,也可以这样写:DataOper.Add(p)

如果要添加一个Book 的话,可以这样
dim b as New Book
b.ISBN=
b.Name=
...
BookOper.Add(b)

怎么样,是不是很通用?
这样写成一个通用类,可以完成所有的实体类的Add/Update/Delete操作
要注意的是,DB.XML数据库架构文件很重要

通用实体类操作完成了,下面是通用的 Select 方法
以前在CSDN上看到过这样的文章:
PersonOper.Keys("Name")="HahaSoft"
PersonOper.keys("Gender")=1
dim p as new Person=PersonOper.Select()
这样就能返回相应的Person的实体类
也可以变相完成一些方法:如
getPersonByID(ID)
getPersonByName()
......

后来苦想一阵,终于实现了.(待续...)

注:(这里实现的单表的O-R映射,如果对有关联的表的话,只要声明一个如 alAddress as ArrayList 的成员就可以了,当然还涉及一些数据

晚期填充以提高效率的技巧,在这里就不详细介绍了)


传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)

传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)http://www.kesjc.com/bbs/forum-66-1.html 第00讲.开山篇 第01讲.html介...
  • cgnine
  • cgnine
  • 2014年07月01日 18:08
  • 1323

轻松搞定RabbitMQ(一)——RabbitMQ基础知识+HelloWorld

本文是简单介绍一下RabbitMQ,参考官网上的教程。同时加入了一些自己的理解。官网教程详见:"Hello World!"。 引言        你是否遇到过多个系统间需要通过定时任务来同步某些数据?...
  • xiaoxian8023
  • xiaoxian8023
  • 2015年09月23日 16:26
  • 7554

数据访问层的设计(一)——功能与接口定义

数据访问层的设计我研究了很长时间,关于接口的定义,好几次都推翻重来。 园子看到过很多easyui+MVC+EF的文章,在早期,我的设计也类似。 但是后来为了增强它,想加点功能通用的功能进去,就耗费...
  • dyllove98
  • dyllove98
  • 2013年07月19日 19:19
  • 7913

韩顺平_轻松搞定网页设计(html+css+javascript)_第20讲_js基本数据类型_js运算符1_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/ js基本语法——基本数据类型 javascript基本数据类型三大类型 ①基本数据类型 分为: (1)数...
  • wenximalong
  • wenximalong
  • 2012年11月21日 12:31
  • 2211

1.创建一个数据访问层

  • 2008年10月24日 22:38
  • 1.98MB
  • 下载

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

继上一节之后,我们开始寻找绑定之法 先是一回想,我们平常是拿什么绑定到数据控件的:List,DataTable,DataSet,DataView之类的, 而写法也就这么个样: xxxx.Data...
  • cyq1162
  • cyq1162
  • 2016年11月23日 12:02
  • 93

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

继上一篇已过两月有余,上一篇时正巧遇出差。回来时找不到当初的demo程序,于是此系列就暂时放下了。 上一篇:CYQ.Data 轻量数据访问层(六) 自定义数据表实现绑定常用的数据控件(中) 不过,...
  • cyq1162
  • cyq1162
  • 2016年11月23日 12:03
  • 145

用数据透视表来做分组计数很轻松,顺带可以搞定直方图!

  • 2014年11月16日 23:07
  • 1.07MB
  • 下载

安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定

  • 2016年11月23日 18:41
  • 26.54MB
  • 下载

084集-数据访问层实现类的创建

  • 2015年10月29日 11:48
  • 19.09MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:轻松搞定数据访问层1
举报原因:
原因补充:

(最多只允许输入30个字)