轻松搞定数据访问层[续]

访问|数据

数据库表

Tbl_Teacher

数据字段名称
类型
说明

teaID
Int
自动编号

teaCode
Char(20)
教师员工号

teaName
Nchar(10)
?

teaGender
Bit
?

teaNation
Nchar(6)
?

teaAge
TinyInt
?

Tbl_Student

数据字段名称
类型
说明

stuID
Int
自动编号

stuCode
Char(20)
学生证号

stuTeacherCode
Char(20)
班主任的员工号

stuName
Nchar(10)
姓名

stuGender
Bit
性别

stuNation
Nchar(6)
民族

stuAge
TinyInt
年龄

stuClassID
Int
班级的ID

用以描述这两张表的XML文件,该XML文件存放的是这两种表的结构信息

假设该文件的名称位? DB.XML

Tbl_Teacher

Name
DBName
Type
Seed
Key

ID
teaID
Integer
1
1

Code
teaCode
String
0
0

Name
teaName
String
0
0

Gender
teaGender
Boolean
0
0

Nation
teaNation
String
0
0

Age
teaAge
Integer
0
0

Tbl_Student

Name
DBName
Type
Seed
Key

ID
stuID
Integer
1
1

Code
stuCode
String
0
0

TeacherCode
stuTeacherCode
String
0
0

Name
stuName
String
0
0

Gender
stuGender
Boolean
0
0

Nation
stuNation
String
0
0

Age
stuAge
Integer
0
0

ClassID
stuClassID
Integer
0
0

必须的类

clsSQLHelper:微软的数据访问辅助类

clsSQLBuilder:根据配置文件生成相应SQL语句的类 见轻松搞定数据访问层[续1]

clsDataAccessOper:所以操作类的父类,提供通用的数据操作方法 见轻松搞定数据访问层[续2]

clsDataAccess:暂时没有什么用

数据类和访问类

实体类clsTeacher 的属性(Property),与数据库字段一一对应

Property ID as Integer

Property Code as String

Property Name as String

Property Gender as Boolean

Property Nation as string

Property Age as integer

实体类clsStudent

Property ID as Integer

Property Code as String

Property TeacherCode as String

Property Name as string

Property Gender as Boolean

Property Nation as string

Property Age as Integer

Property ClassID as Integer

注意:上面两个类的具体代码就不用写了吧

访问类clsTeacherOper 从 clsDataAccessOper 继承

Public class clsTeacherOper

Public Function getAll() as ArrayList

Return clsDataAccessOper.Select((New clsTeacher).GetType)

End Function

Public Function getTeacherByCode(Code as string) as clsTeacher

sDataAccessOper.SelectKeys("Code") = Code

Return clsDataAccessOper.Select((New clsTeacher).GetType).Item(0)

End Function

'以下方法类似,实现的是一些如 getXXX by YYY 的查询

'据操作如添加/删除/修改全部从 clsDataAccessOper 中继承

'这里的查询方法都可以用 clsDataAccessOper.SelectKeys(“”)=… 实现

'只是为了提供更友好的接口,如果你时间紧迫可以把

' clsDataAccessOper.SelectKeys/Select 方法提交给逻辑层或表示层的程序员

End Class

访问类 clsStudentOper从 clsDataAccessOper 继承

(同 clsTeacherOper 类)

上篇<<轻松搞定数据访问层>>文章有人说我代码太少,看不懂。其实我只想说明一下道理。

现在,我贴出 clsSQLBuilder clsDataAccessOper 这两个核心类的全部代码。这也只是想更明白的说清楚道理。这两个类还是第一版本,代码质量不是很高,一些异常没有抛出.只是实现了一些功能。

顺便提到的是,实体类可以通过数据库脚本生成,这个工具当然是要自己写的了。工具很简单,两三百行就可以搞定。还有那个数据库结构信息的XML文件自己写也很麻烦,所以也可以写一个自动生成它的工具。

这都不是这个文章讨论的重点,这里就不介绍怎样才能生成那些模样几乎相同的代码了。

这种数据访问方法的优点在于:

如果你的数据库有变动,比如说tbl_Teahcer 表加了一个字段职称(teaTitle),那么你只需要在 clsTeacher 表里加一个属性 Property Title,然后在 DB.XML 文件中的 tblTeacher 里加一条记录 Title|teaTitle|String|0|0就可以了。

编码速度快,除了这两个核心类,数据实体类可以自动生成,访问类也只是简单的写一些查询方法.

不用写SQL语句。

使用方法举例:

添加一个教师

Dim newTeacher as New clsTeacher

With newTeahcer

‘ 此处如果有ID的赋值,将被忽略,因为是自动增加值。见 clsSQLBuilder

.Name=”Haha”

.Code=”2001”

.Gender=True

End With

clsTeacherOper.Add(newTeacher)

添加一个学生

Dim newStudent as new clsStudent

With newStudent

.Name=”Tom”

.Gender=True

.TeacherCode=”2001”

End with

clsStudentOper.Add(newStudent)

更新删除类似(这里就不举例了)。

现在再就添加一个教师的程序流程大概介绍一下。

当执行 clsTeacherOper.Add(newTeancher) 后,clsDataAccessOper.Add 会把 newTeacher继续传递给 clsSQLBuilder.Add() 方法,在这个方法里,clsSQLBuilder首先取得该对象的类型

在这里是 “clsTeacher” 这个类型字符串和 DB.XML 文件中 tblTeacher 有一一对应的关系,这里是去掉前缀 cls,加上前缀 tbl.你也可以用其它更灵活的方法,如:把映射关系记录到文件中.

然后遍历DB.xml文件中的tblTeacher 表的所有行,其中用到反射方法,以 在知道对象属性名称的情况下取得该属性的值(这其中我也波折了一下,开始用 InvokeMember调用,好麻烦.最后发现竟然有一个 CallByName的方法,用起来特简单.其实它也是封装了InvokeMember,).最终生成这样的SQL语句返回.

Insert Into tblTeacher(Name,Code,Gender…) values (‘Haha’,’2001’,1…)

(有几点要注意,在Add/Delete/Update不同的操作方法里面,对数据表字段有不同的要求.比如在添加时,不能对自动编号ID赋值,所以上面的SQL语句就没有ID字段.这里我只用了Seek和Key的字段属性,其实还可以添加其它属性,如数字型的最大值,字符型验证的正则表达式.以在clsSQLBuilder中完成数据验证操作)

最后clsDataAccessOper.Add 方法用这个SQL语句连接数据库,进行操作.

clsDataAccessOper和clsSQLBuilder我就不详细解说了.代码都贴出来了,自己看吧

时间: 2024-10-04 01:02:56

轻松搞定数据访问层[续]的相关文章

轻松搞定数据访问层[续2]

访问|数据 ' clsDataAccessOper 该类是所有数据访问类的父类 ' by YuJun ' www.hahaIT.com ' hahasoft@msn.com Public Class clsDataAccessOper ' 当Update,Delete,Add方法操作失败返回 False 时,记录出错的信息 Public Shared ModifyErrorString As String Private Shared Keys As New Hashtable ' 数据库连接字

轻松搞定数据访问层[续1]

访问|数据 ' clsSQLBuilder ' By YuHonglai ' www.hahaIT.com ' hahasoft@msn.com ' Note:提供重载方法以指明表名称,默认情况下,是传入参数 o 的类型+"tbl_",此时类名称必须是 clsXXX 的形式. ' 如: ' dim Rooms as new clsRooms ' SQLBuilder.Add(Rooms) ' 此时程序将把 clsRooms 转换成 tbl_Rooms,以操作数据库表 tbl_Rooms

轻松搞定数据访问层

访问|数据 下面实现的方法,可以把你从SQL的Add,Delete,Update,Select的重复劳动解脱出来 1.实体类2.访问类 现在以下表为例tblPerson(perID,perName,perGender,perOld,perNation) 实体类Person---------IDNameGenderOldNation 访问基类DataOper------------Shared DeleteShared AddShared UpdateShared Select 访问类Person

格子啦一键还原 轻松搞定数据备份还原“其实只在瞬间!”

无论是在家悠闲的宅男宅女,还是在公司拼搏的上班族,电脑里面的数据一直是我们关心的东西.常常有人感叹:电脑死机了,以前的快乐时光找不回了;电脑崩溃了,报表文档不见了;电脑瘫痪了,上级要的报告没了,要被炒鱿鱼了--有没有办法可以解决这个问题,让我们不在为电脑数据问题而烦恼呢?格子啦一键还原就可以轻轻松松搞定数据备份还原. 格子啦一键还原(http://hy.gezila.com )是第一款实现3秒备份,5秒还原的秒杀软件,采用数据地图专利技术可创建1000个还原点,恢复到不同时候,系统瘫痪F11一键

五步教你轻松搞定数据中心容量规划问题

无论使用大型机或云计算,数据中心容量规划依然严峻,要确保拥有业务所需的足够IT资源. 数据中心管理者面临着相同的挑战:业务需要更多的计算资源,但同时也希望降低能耗,冷却和其他设施费用.当走到评估是否需要进行数据中心这步时,一步一步的规划,是省下一大笔开支的好方法. 数据中心容量规划是朝着正确方向迈出的重要一步,而且能够增强IT与其他业务领域之间的关系.虽然IT涉及到大数据与与物联网--而这些技术将如何影响数据中心容量--是可以评估,也可以用一定的方法缓解. 这里有五个技巧,帮助您解决数据中心容量

SQL Server数据汇总五招轻松搞定_MsSql

本文我们将讨论如何使用GROUPBY子句来汇总数据. 使用单独列分组 GROUP BY子句通过设置分组条件来汇总数据,在第一个例子中,我在数据库AdventureWork2012中的表 Sales.SalesOrderDetail.中的一列上进行数据分组操作.这个例子以及其他例子都使用数据库AdventureWorks2012,如果你想使用它运行我的代码,你可以点击下载. 下面是第一个示例的源码,在CarrierTrackingNumber列上使用group by子句进行数据分组操作 USE A

剖析 .Net 下的数据访问层技术(一)

访问|数据 l 引言 自从 .NET 真正走入开发人员那天起,"效率"两个字就一直成为众多程序员津津乐道的话题.无论是从开发模式(Cross Language).系统框架(.NET Framework),还是各种使用方便的工具(VS.NET),无一不体现出了它的胜人一筹. 同时,在另一方面,.NET 是否可以真正胜任企业级应用(Enterprise Application)开发的重任,却依然争论不断,褒贬不一. 通常来说,对于一个企业级应用,需要考虑的方面很多,如安全.性能.伸缩性.易

一步一步轻松搞定您的个人数码免冠照

应用目标:制作证件照片 使用软件:Photoshop 7.0(其他版本操作类似) 实现难度:即学即会 相信许多朋友都有这样的经历:填写应聘表.考个驾照或是办个工作证经常会用到免冠照,可每次都想不起来上回留下的底(照)片放在哪里,回到家里翻天覆地地一阵好找,结果常常是无功而返,最后只好一边抱怨自己记性不好一边梳妆打扮走进照相馆,一番讨价还价之后,然后极不情愿地把银子数给照相馆老板,到了下回这样的情形依然会重现.要是我们做好一个无需底片的数码免冠照存在个人电脑或软盘里,随用随扩,岂不是要省掉许多麻烦

用Photoshop滤镜三分钟轻松搞定拼图

滤镜 女儿最喜欢玩拼图游戏,每次买拼图玩具的理由就是它们的画面不一样.家里的拼图玩具堆成山,可是她的兴致依然不减. 一天,我上网时无意中发现了Photoshop的一款制作拼图的滤镜--AV Bros.公司的Puzzle Pro滤镜.下载回来一试,果然效果不错!女儿喜欢的拼图玩具仅用三分钟就轻松搞定了.好东西不敢独享,下面我就给大家详细介绍一下. 首先,到http://download.sina.com.cn/cgi-bin/detail.cgi?s_id=8779去下载并安装这款滤镜,关于如何安