ADO and ADO.net
ADO是什么,它是如何操作數(shù)據(jù)庫的?答:ADO的全名是ActiveX Data Object(ActiveX數(shù)據(jù)對象),是一組優(yōu)化的訪問數(shù)據(jù)庫的專用對象集,它為ASP提供了完整的站點數(shù)據(jù)庫解決方案,它作用在服務器端,提供含有數(shù)據(jù)庫信息的主頁內(nèi)容,通過執(zhí)行SQL命令,讓用戶在瀏覽器畫面中輸入,更新和刪除站點數(shù)據(jù)庫的信息。
ADO主要包括Connection,Recordset和Command三個對象, 它們的主要功能如下:
·Connection對象:負責打開或連接數(shù)據(jù)庫文件;
·Recordset對象:存取數(shù)據(jù)庫的內(nèi)容;
·Command對象:對數(shù)據(jù)庫下達行動查詢指令,以及執(zhí)行SQL Server的存儲過程。
使用Recordset對象和Command對象來訪問數(shù)據(jù)庫的區(qū)別在哪里?
答:Recordset對象會要求數(shù)據(jù)庫傳送所有的數(shù)據(jù),那么數(shù)據(jù)量很大的時候就會造成網(wǎng)絡的阻塞和數(shù)據(jù)庫服務器的負荷過重,因此整體的執(zhí)行效率會降低。
利用Command對象直接調(diào)用SQL語句,所執(zhí)行的操作是在數(shù)據(jù)庫服務器中進行的,顯然會有很高的執(zhí)行效率。特別是在服務器端執(zhí)行創(chuàng)建完成的存儲過程,可以降低網(wǎng)絡流量,另外,由于事先進行了語法分析,可以提高整體的執(zhí)行效率。
什么是ADO.NET架構
如今大部分的應用程序都需要后臺的數(shù)據(jù)庫來為其提供大量的數(shù)據(jù)來源,而應用程序與數(shù)據(jù)庫之間的交流稱為數(shù)據(jù)訪問。而ASP.NET則使用ADO.NET(Active X Data Object)作為數(shù)據(jù)的訪問與操作的協(xié)議,從而使得我們可以在Internet上操作這些數(shù)據(jù)。
ADO.NET的數(shù)據(jù)訪問分為兩大部分:數(shù)據(jù)集(DataSet)與數(shù)據(jù)提供源(Data Provider,我并不清楚中文該怎么翻譯,就叫它數(shù)據(jù)提供源好了,不要和“數(shù)據(jù)源”—Data Source搞混)。
數(shù)據(jù)集:
數(shù)據(jù)集是一個非在線,完全由內(nèi)存表示的一系列數(shù)據(jù),可以被看作一份本地磁盤數(shù)據(jù)庫中部分數(shù)據(jù)的拷貝。數(shù)據(jù)集完全駐留內(nèi)存,可以被獨立于數(shù)據(jù)庫地訪問或者修改。當數(shù)據(jù)集的修改完成后,更改可以被再次寫入數(shù)據(jù)庫,從而保留我們所做過的更改。數(shù)據(jù)集中的數(shù)據(jù)可以由任何數(shù)據(jù)源(Data Source)提供,比如SQL Server或者Oracle。
數(shù)據(jù)提供源:
數(shù)據(jù)提供源用于提供并維護應用程序與數(shù)據(jù)庫之間的連接。
數(shù)據(jù)提供源是一系列為了提供更有效率的訪問而協(xié)同工作的組件。如今微軟在ADO.NET中提供了兩組數(shù)據(jù)提供源,一組叫做SQL Data Provider(SQL數(shù)據(jù)提供源),用于提供應用程序與SQL Server 7.0或者更高版本的訪問。另一組叫做OleDb DataProvider(Object Linking and Embedding DataBase DataProvider),可以允許我們訪問例如Oracle 之類的第三方數(shù)據(jù)源。
每組數(shù)據(jù)提供源中都包含了如下四個對象:
Connect對象提供了對數(shù)據(jù)庫的連接。
Command對象可以用來執(zhí)行命令。
DataReader對象提供了只讀的數(shù)據(jù)記錄集。
DataAdapter對象提供了對數(shù)據(jù)集更新或者修改的操作。
總體來說,使用ADO.NET訪問數(shù)據(jù)可以被概括為以下步驟:
首先應用程序創(chuàng)建一個Connect對象用來建立與數(shù)據(jù)庫之間的連接。然后Command對象提供了執(zhí)行命令的接口,可以對數(shù)據(jù)庫執(zhí)行相應的命令。當命令執(zhí)行后數(shù)據(jù)庫返回了大于零個數(shù)據(jù)時,DataReader會被返回從而提供對返回的結(jié)果集的數(shù)據(jù)訪問。或者,DataAdapter可以被用來填充數(shù)據(jù)集,然后數(shù)據(jù)庫可以由Command對象或者DataAdapter對象進行相應的更改。
具體來看數(shù)據(jù)提供源的四種對象
Connect 對象
Connect對象用來提供對數(shù)據(jù)庫的連接,Microsoft Visual Studio .Net中微軟提供了兩種Connect對象,分別為SqlConnection對象,用來提供對SQL Server 7.0或更高版本的連接,同時還有OleDbConnection對象,用來提供對Access與其他第三方數(shù)據(jù)庫的連接。
Command 對象
同樣,Command對象分為兩組,SqlCommand與OleDbCommand。Command對象被用來執(zhí)行針對數(shù)據(jù)庫的命令,比如執(zhí)行數(shù)據(jù)庫的存儲過程(Stored Procedure),SQL命令,或者直接返回一個完整的表。Command對象提供三種方法(Methods)用來執(zhí)行上述操作。
ExecuteNonQuery用來執(zhí)行一個不需返回數(shù)據(jù)的命令,比如表的插入,更新或者刪除操作。
ExecuteScalar返回從一個查詢得到的單獨的值。
ExecuteReader用來返回一個從DataReader來的結(jié)果集。
DataReader對象
DataReader提供了forward-only, read-only, connected stream的結(jié)果集。
這里的forward-only表示數(shù)據(jù)只能夠向前,如果我們訪問了一條數(shù)據(jù)后想要再次訪問這條數(shù)據(jù)就必須重新開始。
Read-only表示只讀,不能夠?qū)Y(jié)果集進行操作。
Connected stream表示DataReader對象是面向流連接的。所謂的流可以把它看作是管道,這邊放進去東西那邊就可以得到,實際上TCP協(xié)議就是面向連接的流協(xié)議。
不同于其他的三種對象,DataReader不能夠被用戶直接創(chuàng)建,必須也只能由ExecuteReader返回。
SqlCommand.ExecuteReader返回SqlDataReader。
同理,OleDbCommand.ExecuteReader返回OleDbDataReader
需要注意的是,DataReader對應用程序提供行級訪問(每次只能訪問數(shù)據(jù)的一行),當你需要多行的時候就需要多次的訪問這個對象。這樣做的好處就是內(nèi)存中永遠只需要保留一行的數(shù)據(jù),缺點就是每次訪問都要開啟Connect的連接。
DataAdapter對象
DataAdapter對象是ADO.NET數(shù)據(jù)訪問的核心。實際上它是數(shù)據(jù)集與數(shù)據(jù)庫的中間層。DataAdapter可以使用Fill方法來為DataTable或者DataSet填充數(shù)據(jù)。然后當內(nèi)存操作完成后DataAdapter可以確認之前的操作從而對真正存于數(shù)據(jù)庫上的數(shù)據(jù)進行修改。
DataAdapter包含四種屬性用來代表不同的數(shù)據(jù)庫命令:
SelectCommand用來查詢數(shù)據(jù)
InsertCommand用來插入數(shù)據(jù)
DeleteCommand用來刪除數(shù)據(jù)
UpdateCommand用來更新數(shù)據(jù)當Update方法被調(diào)用后,數(shù)據(jù)集中的數(shù)據(jù)被更改然后拷貝回數(shù)據(jù)庫,緊接著使用InsertCommand, DeleteCommand, UpdateCommand中合適一個來進行數(shù)據(jù)更新。
posted on 2007-07-25 16:46 Picasso 閱讀(272) 評論(0) 編輯 收藏 所屬分類: .Net