国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

輕松搞定數據訪問層[續]

2024-07-21 02:23:21
字體:
來源:轉載
供稿:網友


數據庫表

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我就不詳細解說了.代碼都貼出來了,自己看吧

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石屏县| 得荣县| 东平县| 枣阳市| 彭山县| 开平市| 玉田县| 昌吉市| 英吉沙县| 东城区| 赣榆县| 华池县| 镇康县| 洛南县| 右玉县| 藁城市| 疏勒县| 江达县| 成武县| 夏邑县| 建德市| 遂平县| 宁强县| 滁州市| 伽师县| 扎鲁特旗| 唐山市| 和顺县| 满城县| 荃湾区| 饶阳县| 鲁山县| 郎溪县| 新干县| 枣庄市| 石棉县| 永嘉县| 兴安县| 木兰县| 靖西县| 民乐县|