六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

簡單搞定數據訪問層

[摘要]下面實現的方法,可以把你從SQL的Add,Delete,Update,Select的重復勞動解脫出來1。實體類2。訪問類現在以下表為例tblPerson(perID,perName,perGender,perOld,perNation)實體類Person---------IDNameGenderO...
下面實現的方法,可以把你從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 的成員就可以了,當然還涉及一些數據

晚期填充以提高效率的技巧,在這里就不詳細介紹了)





主站蜘蛛池模板: 在线观看中文字幕亚洲 | 日韩免费精品一级毛片 | 亚洲午夜国产精品 | 日本无卡码一区二区三区 | 中文字幕一二三四 | 亚洲video | 亚洲综合自拍 | 欧美亚洲日本国产 | 日韩毛片在线播放 | 又粗又大又硬又爽的免费视频 | 在线观看亚洲欧美 | 依人在线观看 | 四虎国产永久免费久久 | 亚洲94vvv男人的天堂五月 | 天天操天天操天天 | 亚洲一区免费在线观看 | 日本一区二区免费高清视频 | 天天爱添天天爱添天天爱添 | 亚洲午夜精品久久久久久抢 | 一级淫 | 一级做a爱片特黄在线观看 一级做a爱片久久蜜桃 | 青青青草视频在线 | 亚洲综合专区 | 欧美一区二区三区在线可观看 | 亚洲精品 国产 日韩 | 欧美一级大黄 | 青草国产精品久久久久久 | 色猫av | 天堂综合 | 天天综合干 | 中文字幕第66页永久乱码 | 午夜免费观看视频 | 视频一区日韩 | 亚洲国产成人久久一区www | 日日做日日摸夜夜爽 | 亚洲福利视频一区二区 | 青青草原在线播放 | 五月天婷婷免费视频 | 青青草精品在线观看 | 最近手机中文字幕大全首页 | 日本 亚洲 欧美 |