999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析ADO.NET數(shù)據(jù)庫編程

2008-12-31 00:00:00
電腦知識(shí)與技術(shù) 2008年24期

摘要:ADO.NET提供對Microsoft SQL Server 等數(shù)據(jù)源以及通過OLE DB和XML公開的數(shù)據(jù)源的一致訪問,數(shù)據(jù)共享使用者應(yīng)用程序可以使用 ADO.NET來連接到這些數(shù)據(jù)源,并檢索、操作和更新數(shù)據(jù)。

關(guān)鍵詞:ADO.NET;DataSet;XML;NET Framework;數(shù)據(jù)提供程序

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)24-1130-03

ADO.NET Database Programming Analysis

WANG Hui, BO Tao

(Tianjin Medical School, Tianjing 300222, China)

Abstract: ADO.NET provide data source to Microsoft SQL Server and OLE DB as well as XML for the consistent access. user of date sharing can use the program of ADO.NET connecting data source and retrieval, operation and updating of the date.

Key words: ADO.NET; DataSet; XML; NET Framework; provider

1 引言

隨著應(yīng)用程序開發(fā)的發(fā)展演變,新的應(yīng)用程序已基于 Web 應(yīng)用程序模型越來越松散地耦合。如今,越來越多的應(yīng)用程序使用 XML 來編碼要通過網(wǎng)絡(luò)連接傳遞的數(shù)據(jù)。Web應(yīng)用程序?qū)?HTTP用作在層間進(jìn)行通信的結(jié)構(gòu),因此它們必須顯式處理請求之間的狀態(tài)維護(hù)。在此編程風(fēng)格中,連接會(huì)在程序的整個(gè)生存期中保持打開,而不需要對狀態(tài)進(jìn)行特殊處理。

設(shè)計(jì)ADO.NET的目的是為了滿足這一新編程模型的以下要求:具有斷開式數(shù)據(jù)結(jié)構(gòu);能夠與XML緊密集成;具有能夠組合來自多個(gè)、不同數(shù)據(jù)源的數(shù)據(jù)的通用數(shù)據(jù)表示形式;以及具有為與數(shù)據(jù)庫交互而優(yōu)化的功能,這些要求都是.NET Framework固有的內(nèi)容。

2 在創(chuàng)建ADO.NET時(shí),Microsoft具有以下設(shè)計(jì)目標(biāo)。

2.1 利用當(dāng)前的ADO知識(shí)

ADO.NET 的設(shè)計(jì)滿足了當(dāng)今應(yīng)用程序開發(fā)模型的多種要求。同時(shí),該編程模型盡可能地與 ADO 保持一致,這使當(dāng)今的ADO開發(fā)人員不必從頭開始學(xué)習(xí)全新的數(shù)據(jù)訪問技術(shù)。ADO.NET是.NET Framework 固有部分,因此對于 ADO 程序員決不是完全陌生的。

2.2 支持N層編程模式

ADO.NET為斷開式n層編程環(huán)境提供了一流的支持,許多新的應(yīng)用程序都是為該環(huán)境編寫的。使用斷開式數(shù)據(jù)集這一概念已成為編程模型中的焦點(diǎn)。n層編程的ADO.NET 解決方案就是DataSet。

2.3 集成XML支持

XML和數(shù)據(jù)訪問是緊密聯(lián)系在一起的,即XML的全部內(nèi)容都是有關(guān)數(shù)據(jù)編碼的,而數(shù)據(jù)訪問越來越多的內(nèi)容都與XML有關(guān)。.NET Framework 不僅支持Web標(biāo)準(zhǔn),它還是完全基于Web標(biāo)準(zhǔn)生成的。

3 ADO.NET概述

ADO.NET有效地從數(shù)據(jù)操作中將數(shù)據(jù)訪問分解為多個(gè)可以單獨(dú)使用或一前一后使用的不連續(xù)組件。ADO.NET包含用于連接到數(shù)據(jù)庫、執(zhí)行命令和檢索結(jié)果的.NET Framework數(shù)據(jù)提供程序。您可以直接處理檢索到的結(jié)果,或?qū)⑵浞湃階DO.NET DataSet 對象,以便與來自多個(gè)源的數(shù)據(jù)或在層之間進(jìn)行遠(yuǎn)程處理的數(shù)據(jù)組合在一起,以特殊方式向用戶公開。ADO.NET DataSet對象也可以獨(dú)立于.NET Framework 數(shù)據(jù)提供程序使用,以管理應(yīng)用程序本地的數(shù)據(jù)或源自XML的數(shù)據(jù)。

3.1 ADO.NET結(jié)構(gòu)

3.1.1 XML和ADO.NET

ADO.NET借用XML的力量來提供對數(shù)據(jù)的斷開式訪問。ADO.NET的設(shè)計(jì)與.NET Framework中XML類的設(shè)計(jì)是并進(jìn)的,它們都是同一個(gè)結(jié)構(gòu)的組件。

ADO.NET和.NET Framework中的XML類集中于DataSet對象。無論DataSet是文件還是XML流,它都可以使用來自 XML 源的數(shù)據(jù)來進(jìn)行填充。

3.1.2 ADO.NET組件

設(shè)計(jì) ADO.NET組件的目的是為了從數(shù)據(jù)操作中分解出數(shù)據(jù)訪問。ADO.NET的兩個(gè)核心組件會(huì)完成此任務(wù):DataSet和.NET Framework數(shù)據(jù)提供程序,后者是一組包括 Connection、Command、DataReader 和 DataAdapter 對象在內(nèi)的組件。

ADO.NET DataSet是 ADO.NET 的斷開式結(jié)構(gòu)的核心組件。DataSet 的設(shè)計(jì)目的很明確:為了實(shí)現(xiàn)獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問。因此,它可以用于多種不同的數(shù)據(jù)源,用于 XML 數(shù)據(jù),或用于管理應(yīng)用程序本地的數(shù)據(jù)。

ADO.NET 結(jié)構(gòu)的另一個(gè)核心元素是 NET Framework數(shù)據(jù)提供程序 ,其組件的設(shè)計(jì)目的相當(dāng)明確:為了實(shí)現(xiàn)數(shù)據(jù)操作和對數(shù)據(jù)的快速、只進(jìn)、只讀訪問。Connection 對象提供與數(shù)據(jù)源的連接。Command 對象使您能夠訪問用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲(chǔ)過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。DataReader 從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流。最后,DataAdapter 提供連接 DataSet 對象和數(shù)據(jù)源的橋梁。DataAdapter 使用 Command 對象在數(shù)據(jù)源中執(zhí)行 SQL 命令,以便將數(shù)據(jù)加載到 DataSet 中,并使對 DataSet 中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。

下圖闡釋了 ADO.NET 結(jié)構(gòu)的組件:

4 使用ADO.NET

4.1 使用 ADO.NET連接到SQL Server

Dim nwindConn As SqlConnection = New SqlConnection(\"Data Source=localhost;Integrated Security=SSPI; Initial Catalog=northwind\")

nwindConn.Open()

4.2 執(zhí)行命令

當(dāng)建立與數(shù)據(jù)源的連接后,可以使用 Command 對象來執(zhí)行命令并從數(shù)據(jù)源中返回結(jié)果。您可以使用 Command 構(gòu)造函數(shù)來創(chuàng)建命令,該構(gòu)造函數(shù)采用在數(shù)據(jù)源、Connection 對象和 Transaction 對象中執(zhí)行的 SQL 語句的可選參數(shù)。也可以使用 Connection 的 CreateCommand 方法來創(chuàng)建用于特定 Connection 對象的命令。您可以使用 CommandText 屬性來查詢和修改 Command 對象的 SQL 語句。

Command 對象公開了幾個(gè)可用于執(zhí)行所需操作的 Execute 方法。當(dāng)以數(shù)據(jù)流的形式返回結(jié)果時(shí),使用 ExecuteReader 可返回 DataReader 對象。使用 ExecuteScalar 可返回單個(gè)值。使用 ExecuteNonQuery 可執(zhí)行不返回行的命令。

以下代碼示例演示如何設(shè)置 Command 對象的格式,以便從 Northwind 數(shù)據(jù)庫中返回 Categories 的列表。

Dim catCMD As SqlCommand = New SqlCommand(\"SELECT CategoryID, CategoryName FROM Categories\", nwindConn)[1]

4.3 使用 DataReader 檢索數(shù)據(jù)

可以使用 ADO.NET DataReader 從數(shù)據(jù)庫中檢索只讀、只進(jìn)的數(shù)據(jù)流。查詢結(jié)果在查詢執(zhí)行時(shí)返回,在并存儲(chǔ)在客戶端的網(wǎng)絡(luò)緩沖區(qū)中,直到您使用 DataReader 的 Read 方法對它們發(fā)出請求。使用 DataReader 可以提高應(yīng)用程序的性能,因?yàn)橐坏?shù)據(jù)可用,DataReader 方法就立即檢索該數(shù)據(jù),而不是等待返回查詢的全部結(jié)果;并且在默認(rèn)情況下,該方法一次只在內(nèi)存中存儲(chǔ)一行,從而降低了系統(tǒng)開銷。

當(dāng)創(chuàng)建 Command 對象的實(shí)例后,可調(diào)用 Command.ExecuteReader 從數(shù)據(jù)源中檢索行,從而創(chuàng)建一個(gè) DataReader,如以下示例所示。

Dim myReader As SqlDataReader = myCommand.ExecuteReader()

4.4 從 SQL Server 中以 XML 形式獲取數(shù)據(jù)

Microsoft SQL Server 2000 引入了在檢索數(shù)據(jù)時(shí)對 XML 功能的支持。為了使您能夠直接從 Microsoft SQL Server 2000 中返回 XML 流,SQL Server .NET Framework 數(shù)據(jù)提供程序的 SqlCommand 對象具有 ExecuteXmlReader 方法。ExecuteXmlReader 返回已填充了為 SqlCommand 指定的 SQL 語句的結(jié)果的 System.Xml.XmlReader 對象。

Dim custCMD As SqlCommand = New SqlCommand(\"SELECT * FROM Customers FOR XML AUTO, ELEMENTS\", nwindConn)

Dim myXR As System.Xml.XmlReader = custCMD.ExecuteXmlReader()[2]

4.5 從 DataAdapter 填充 DataSet

ADO.NET DataSet 是數(shù)據(jù)的內(nèi)存駐留表示形式,它提供了獨(dú)立于數(shù)據(jù)源的一致關(guān)系編程模型。DataSet 表示整個(gè)數(shù)據(jù)集,其中包含表、約束和表之間的關(guān)系。由于 DataSet 獨(dú)立于數(shù)據(jù)源,DataSet 可以包含應(yīng)用程序本地的數(shù)據(jù),也可以包含來自多個(gè)數(shù)據(jù)源的數(shù)據(jù)。與現(xiàn)有數(shù)據(jù)源的交互通過 DataAdapter 來控制。

.NET Framework 所包含的每個(gè)NET Framework 數(shù)據(jù)提供程序都具有一個(gè)DataAdapter對象,DataAdapter對象用于從數(shù)據(jù)源中檢索數(shù)據(jù)并填充DataSet中的表,DataAdapter還會(huì)將對DataSet作出的更改解析回?cái)?shù)據(jù)源。DataAdapter使用 .NET Framework 數(shù)據(jù)提供程序的Connection對象連接到數(shù)據(jù)源,使用Command對象從數(shù)據(jù)源中檢索數(shù)據(jù)并將更改解析回?cái)?shù)據(jù)源。

DataAdapter的SelectCommand屬性是一個(gè)Command對象,它從數(shù)據(jù)源中檢索數(shù)據(jù)。DataAdapter 的 InsertCommand、UpdateCommand和DeleteCommand 屬性也是 Command 對象,它們按照對DataSet 中數(shù)據(jù)的修改來管理對數(shù)據(jù)源中數(shù)據(jù)的更新。DataAdapter 的 Fill 方法用于使用 DataAdapter 的 SelectCommand 的結(jié)果來填充 DataSet。Fill 將要填充的 DataSet 和 DataTable 對象(或要使用從 SelectCommand 中返回的行來填充的 DataTable 的名稱)用作它的參數(shù)。

Fill 方法使用 DataReader 對象來隱式地返回用于在 DataSet 中創(chuàng)建表的列名稱和類型以及用來填充 DataSet 中的表行的數(shù)據(jù)。表和列僅在不存在時(shí)才創(chuàng)建;否則,F(xiàn)ill 將使用現(xiàn)有的 DataSet 架構(gòu)。

4.6 使用 DataAdapter 和 DataSet 更新數(shù)據(jù)庫

DataAdapter 的 Update 方法可調(diào)用來將 DataSet 中的更改解析回?cái)?shù)據(jù)源。與 Fill 方法類似,Update 方法將 DataSet 的實(shí)例和可選的 DataTable 對象或 DataTable 名稱用作參數(shù)。DataSet 實(shí)例是包含已作出的更改的 DataSet,而 DataTable 標(biāo)識(shí)從其中檢索更改的表。

當(dāng)調(diào)用 Update 方法時(shí),DataAdapter 將分析已作出的更改并執(zhí)行相應(yīng)的命令(INSERT、UPDATE 或 DELETE)。當(dāng) DataAdapter 遇到對 DataRow 的更改時(shí),它將使用 InsertCommand、UpdateCommand 或 DeleteCommand 來處理該更改。這樣,您就可以通過在設(shè)計(jì)時(shí)指定命令語法并在可能時(shí)通過使用存儲(chǔ)過程來盡量提高 ADO.NET 應(yīng)用程序的性能。在調(diào)用 Update 之前,必須顯式設(shè)置這些命令。如果調(diào)用了 Update 但不存在用于特定更新的相應(yīng)命令(例如,不存在用于已刪除行的 DeleteCommand),則將引發(fā)異常。

Command 參數(shù)可用于為 DataSet 中每個(gè)已修改行的 SQL 語句或存儲(chǔ)過程指定輸入和輸出值。

5 ADO.NET 示例程序

以下示例連接到 Microsoft SQL Server 2000 上的 Northwind 數(shù)據(jù)庫,并使用 DataReader返回一個(gè)類別列表。

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports Microsoft.VisualBasic

Public Class Sample

Public Shared Sub Main()

Dim nwindConn As SqlConnection = New SqlConnection(\"Data Source=localhost; Integrated Security=SSPI;Initial Catalog=northwind\")

Dim catCMD As SqlCommand = nwindConn.CreateCommand()

catCMD.CommandText = \"SELECT CategoryID, CategoryName FROM Categories\"

nwindConn.Open()

Dim myReader As SqlDataReader = catCMD.ExecuteReader()

Do While myReader.Read()

Console.WriteLine(vbTab \"{0}\" vbTab \"{1}\", myReader.GetInt32(0), myReader.GetString(1))

Loop

myReader.Close()

nwindConn.Close()

End Sub

End Class

參考文獻(xiàn):

[1] 郭瑞軍,王松.Visual Basic.NET數(shù)據(jù)庫開發(fā)實(shí)例精粹[M].北京:電子工業(yè)出版社,2006:81-92.

[2] 劉保順.Visual Basic.NET數(shù)據(jù)庫開發(fā)[M].北京:清華大學(xué)出版社,2004:116-123.

主站蜘蛛池模板: 最新国产高清在线| 日韩中文精品亚洲第三区| 免费看a毛片| 国产精品久久久久鬼色| 国产精品香蕉在线| 996免费视频国产在线播放| 中文字幕啪啪| 日韩二区三区| 欧美a级完整在线观看| 亚洲三级成人| yy6080理论大片一级久久| 亚洲人成在线免费观看| 国产三级a| 国产成人综合亚洲欧美在| 青青国产在线| 亚洲成综合人影院在院播放| 中文成人在线视频| 亚洲欧美成人在线视频| 精品国产网站| 精品国产成人三级在线观看| 国产精女同一区二区三区久| 尤物亚洲最大AV无码网站| 国产国模一区二区三区四区| 亚洲国产欧美国产综合久久| 国产精品欧美亚洲韩国日本不卡| 免费人成视网站在线不卡| 国产精品伦视频观看免费| 久久无码av三级| 欧美国产日韩在线| 中文字幕人妻无码系列第三区| 日本成人精品视频| 2021亚洲精品不卡a| 中文字幕永久在线看| 国产主播喷水| 亚洲日本精品一区二区| 久久婷婷国产综合尤物精品| 嫩草影院在线观看精品视频| 九色91在线视频| 国产精品成人不卡在线观看| 欧美日韩一区二区三| 久久久亚洲国产美女国产盗摄| 91探花在线观看国产最新| 国产高潮视频在线观看| 亚洲成人免费在线| 亚洲人成电影在线播放| 精品国产成人a在线观看| 欧美色亚洲| 亚洲人成网站在线观看播放不卡| 成人福利在线看| 2021天堂在线亚洲精品专区| 亚洲婷婷六月| 久久毛片网| 久久国产亚洲偷自| 亚洲乱码在线播放| 911亚洲精品| 日韩欧美中文| 亚洲精品手机在线| 日韩精品亚洲精品第一页| 欧美黄网站免费观看| 情侣午夜国产在线一区无码| 亚洲国产亚综合在线区| 在线免费观看a视频| 亚洲精品成人片在线观看| 国产女人在线| 在线视频一区二区三区不卡| 国产91丝袜在线观看| 亚洲午夜18| 欧美成人A视频| 先锋资源久久| 亚洲一区二区无码视频| 国产九九精品视频| 在线观看av永久| 久久国产免费观看| 亚洲人免费视频| 欧美一区二区丝袜高跟鞋| 人人澡人人爽欧美一区| 亚洲第一成年人网站| 一本色道久久88亚洲综合| 国产午夜一级毛片| 久久国产精品国产自线拍| 不卡无码网| 丁香婷婷久久|