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

首頁 > 編程 > .NET > 正文

ADO.NET深入研究(1)[特別推薦]

2024-07-10 13:03:38
字體:
來源:轉載
供稿:網友
導 讀:.net 在數據存取方面做了很大的調整。在.net 框架下,數據存取是由ado.net來完成的,這是一個ado的改進和完善版本。它最顯著的變化是其完全基于xml。而對于從事ado開發的人員來說,recordset對象的消失也令他們感到驚奇。

--------------------------------------------------------------------------------

翻譯整理:.net技術網(www.51dotnet.com)slash
原文出處:http://www.dnjonline.com/articles/essentials/iss22_essentials.html

.net 在數據存取方面做了很大的調整。在.net 框架下,數據存取是由ado.net來完成的,這是一個ado的改進和完善版本。它最顯著的變化是其完全基于xml。而對于從事ado開發的人員來說,recordset對象的消失也令他們感到驚奇。

微軟對recordset 對象的看法是:它相對于最初的為了產生一個sql查詢的結果的機制,顯得有些過于臃腫了。因此,在ado.net中,recordset對象的功能將被拆分到三個部分中去。首先是datareader對象, 它所要完成的功能是將數據簡單的表現出來;在ado中,類似功能是由向前的、服務器端的光標(forward-only, server-side cursor)來實現的。然后是dataset 和 datasetcommand 對象,它們能夠在客戶端創建一個或一個以上的數據集合的緩存,并對它們進行操作。在ado中,客戶端光標的使用相對比較單一化,而在這方面ado.net則分別賦予這兩個對象不同的功能,從而使它們具有更加專一而強大的功能。最后,是其他一些在ado中能夠實現的功能,比如說,利用connection對象在保守鎖定的情況下進行數據的更新。這是在ado.net中無法實現的功能,這意味著在某些時候,ado將被繼續使用。

在進入dataset的討論之前,我們先來簡單的來看一看ado.net。

使用datareader

ado.net提供了三個類:dbconnection, dbcommand 和 dbdatareader,它們與傳統的ado對象十分的相似。但是在.net應用程序中它們不能被直接使用。能夠使用的是從它們繼承而來的類,比如adoconnection, adocommand 和 adodatareader來讀取數據,這里的前提是存在一個oledb的provider。如果要操作的對象是sql server,那么將使用另一些功能相同的類sqlconnection, sqlcommand 和 sqldatareader 以便直接通過sql server 的 tds 連接通道來獲得更好的工作性能。下面是一個例子(因為在這里c#和vb.net的代碼區別不是很大,所以將只使用vb.net的實例):

imports system.data
imports system.data.ado
..
dim cn as new adoconnection()
cn.connectionstring = strconnect

try
cn.open()
dim cd as new adocommand(搒elect * from authors? cn)
dim dr as adodatareader
cd.execute(dr)
while dr.read()
listbox1.items.add(dr(揳u_lname?)
end while
catch err as exception
msgbox(err.tostring)
finally
if cn.state = dbobjectstate.open then cn.close()
end try
在上面你會發現在while loop語句中沒有出現movenext方法,因為datareader的read方法將自動前移光標,并會在沒有數據的時候返回一個false值。這顯然減輕了開發者的工作量。

在兩種情況下,datareader被推薦使用:一、客戶界面利用手寫代碼,或是沒有用到數據綁定并且數據的更新是利用手寫的sql語句或是存儲過程,這種情況下,datareader將提供有效的訪問相關數據的方法;二、一個需要查看數據庫狀態的的過程,但不需要實現諸如自動更新的功能。一些比較好的應用實例有向下拉菜單填充數據,以及產品編號的驗證。

理解datasets

對于一些開發者來說,可能會對datasets的使用頗有微詞,但事實上,掌握它并不難。如果你對連接斷開的recordset 模式,以及分層的recordset 的使用不陌生,并且樂于使用一些xml的話,那么利用datasets 就沒有什么困難了。

可是有什么必要去花費時間去重新學習一種對象模型呢?
理由之一是,ado.net 力推的斷開連接模式(disconnected model)是非常有意義的。斷開連接的數據伸縮性更高,因為這種模式對數據服務器的壓力比較小。通過平行服務器對中間層進行擴展比對數據層進行擴展要容易的多,因此對于可擴展的應用程序來說,對數據層資源的使用要謹慎。斷開連接模式將在這里得到應用。
理由二,在數據管理方面,斷開連接模式有非常廣闊的前景。

如果說有一種技術的 發展比ado還要迅速,這就是xml。xml解決了兩個ado所對的局限。
1、xml更加適用與跨平臺的的數據傳輸,因為它能夠穿越防火墻。
2、xml比ado包括它的擴展ado2.5描述的類型多。一個簡單的例子,同樣面對扁平的數據,普通的xml將比ado顯示出更高的效率。

datasets是xml與ado結合的產物,它的一個重要的特點是與數據庫或sql無關。它只是簡單的對數據表進行操作,交換數據或是將數據綁定到用戶界面上。

向datasets中加入數據表的方法有兩種:
1、利用datasetcommand對象,它可以以xml 的形式返回一個數據庫查詢的結果。在處理數據庫更新的時候,這種方法與ado的客戶端光標基本相同,但提供更強的控制。
2、直接對xml數據進行操作。dataset 對象有對xml數據和schemas進行讀寫的的方法,并且可以和xmldatadocument對象(該對象是多用途xmldocument類的繼承)緊密的結合起來工作,它具有一些對扁平數據操作的特殊函數因此可以作為從dataset 到通用xml dom的橋梁。

下面是一段使用dataset的代碼:
dim dc as new adodatasetcommand( _
"select au_id, au_fname, au_lname from authors" & _
" where au_lname = ‘ringer’", strconnect)
dim ds as new dataset()

dc.filldataset(ds, "authors")
msgbox(ds.xmlschema, , "xml schema")
msgbox(ds.xmldata, , "xml data")

以上的代碼將一個‘authors’數據表填充到dataset 對象實例 ds 中,并顯示了xml數據和schemas,請看兩個顯示結果:表1 和 表2

向dataset中添加數據表的操作是非常容易的,請看下面的代碼:

dc = new adodatasetcommand( _
"select * from titleauthor" & _
" where title_id like 'ps%'", strconnect)

dc.filldataset(ds, "titles")
msgbox(ds.xmldata, , "xml data")




表1顯示xml schema




表2顯示dataset 對象生成的數據




未 完 待 續
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 格尔木市| 县级市| SHOW| 阳信县| 宁乡县| 通山县| 绥宁县| 沽源县| 屏东县| 上栗县| 贺兰县| 湄潭县| 特克斯县| 吴桥县| 凤凰县| 兴文县| 昌都县| 民勤县| 剑河县| 资中县| 仁化县| 虎林市| 浮梁县| 龙口市| 延庆县| 平南县| 汤原县| 泰和县| 昌邑市| 政和县| 江阴市| 布尔津县| 绵竹市| 肇庆市| 肃宁县| 赣州市| 广平县| 遂川县| 抚州市| 苏尼特右旗| 保靖县|