輕鬆搞定資料訪問層[續]

來源:互聯網
上載者:User
訪問|資料 資料庫表

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的欄位屬性,其實還可以添加其它屬性,如數字型的最大值,字元型驗證的Regex.以在clsSQLBuilder中完成資料驗證操作)

最後clsDataAccessOper.Add 方法用這個SQL語句串連資料庫,進行操作.

clsDataAccessOper和clsSQLBuilder我就不詳細解說了.代碼都貼出來了,自己看吧



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。