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