成長空間

          MiLife

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          Automation Testing Development

          最新評(píng)論

          ADO and ADO.net

          ADO是什么,它是如何操作數(shù)據(jù)庫的?

            答:ADO的全名是ActiveX Data Object(ActiveX數(shù)據(jù)對(duì)象),是一組優(yōu)化的訪問數(shù)據(jù)庫的專用對(duì)象集,它為ASP提供了完整的站點(diǎn)數(shù)據(jù)庫解決方案,它作用在服務(wù)器端,提供含有數(shù)據(jù)庫信息的主頁內(nèi)容,通過執(zhí)行SQL命令,讓用戶在瀏覽器畫面中輸入,更新和刪除站點(diǎn)數(shù)據(jù)庫的信息。

            ADO主要包括Connection,Recordset和Command三個(gè)對(duì)象, 它們的主要功能如下:

            ·Connection對(duì)象:負(fù)責(zé)打開或連接數(shù)據(jù)庫文件;
            ·Recordset對(duì)象:存取數(shù)據(jù)庫的內(nèi)容;
            ·Command對(duì)象:對(duì)數(shù)據(jù)庫下達(dá)行動(dòng)查詢指令,以及執(zhí)行SQL Server的存儲(chǔ)過程。

          使用Recordset對(duì)象和Command對(duì)象來訪問數(shù)據(jù)庫的區(qū)別在哪里?

            答:Recordset對(duì)象會(huì)要求數(shù)據(jù)庫傳送所有的數(shù)據(jù),那么數(shù)據(jù)量很大的時(shí)候就會(huì)造成網(wǎng)絡(luò)的阻塞和數(shù)據(jù)庫服務(wù)器的負(fù)荷過重,因此整體的執(zhí)行效率會(huì)降低。
          利用Command對(duì)象直接調(diào)用SQL語句,所執(zhí)行的操作是在數(shù)據(jù)庫服務(wù)器中進(jìn)行的,顯然會(huì)有很高的執(zhí)行效率。特別是在服務(wù)器端執(zhí)行創(chuàng)建完成的存儲(chǔ)過程,可以降低網(wǎng)絡(luò)流量,另外,由于事先進(jìn)行了語法分析,可以提高整體的執(zhí)行效率。


          什么是ADO.NET架構(gòu)

          如今大部分的應(yīng)用程序都需要后臺(tái)的數(shù)據(jù)庫來為其提供大量的數(shù)據(jù)來源,而應(yīng)用程序與數(shù)據(jù)庫之間的交流稱為數(shù)據(jù)訪問。而ASP.NET則使用ADO.NETActive 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ù)集是一個(gè)非在線,完全由內(nèi)存表示的一系列數(shù)據(jù),可以被看作一份本地磁盤數(shù)據(jù)庫中部分?jǐn)?shù)據(jù)的拷貝。數(shù)據(jù)集完全駐留內(nèi)存,可以被獨(dú)立于數(shù)據(jù)庫地訪問或者修改。當(dāng)數(shù)據(jù)集的修改完成后,更改可以被再次寫入數(shù)據(jù)庫,從而保留我們所做過的更改。數(shù)據(jù)集中的數(shù)據(jù)可以由任何數(shù)據(jù)源(Data Source)提供,比如SQL Server或者Oracle

           

          數(shù)據(jù)提供源:

          數(shù)據(jù)提供源用于提供并維護(hù)應(yīng)用程序與數(shù)據(jù)庫之間的連接。

          數(shù)據(jù)提供源是一系列為了提供更有效率的訪問而協(xié)同工作的組件。如今微軟在ADO.NET中提供了兩組數(shù)據(jù)提供源,一組叫做SQL Data ProviderSQL數(shù)據(jù)提供源),用于提供應(yīng)用程序與SQL Server 7.0或者更高版本的訪問。另一組叫做OleDb DataProviderObject Linking and Embedding DataBase DataProvider),可以允許我們?cè)L問例如Oracle 之類的第三方數(shù)據(jù)源。

          每組數(shù)據(jù)提供源中都包含了如下四個(gè)對(duì)象:

          Connect對(duì)象提供了對(duì)數(shù)據(jù)庫的連接。

          Command對(duì)象可以用來執(zhí)行命令。

          DataReader對(duì)象提供了只讀的數(shù)據(jù)記錄集。

          DataAdapter對(duì)象提供了對(duì)數(shù)據(jù)集更新或者修改的操作。

           

          總體來說,使用ADO.NET訪問數(shù)據(jù)可以被概括為以下步驟:

          首先應(yīng)用程序創(chuàng)建一個(gè)Connect對(duì)象用來建立與數(shù)據(jù)庫之間的連接。然后Command對(duì)象提供了執(zhí)行命令的接口,可以對(duì)數(shù)據(jù)庫執(zhí)行相應(yīng)的命令。當(dāng)命令執(zhí)行后數(shù)據(jù)庫返回了大于零個(gè)數(shù)據(jù)時(shí),DataReader會(huì)被返回從而提供對(duì)返回的結(jié)果集的數(shù)據(jù)訪問。或者,DataAdapter可以被用來填充數(shù)據(jù)集,然后數(shù)據(jù)庫可以由Command對(duì)象或者DataAdapter對(duì)象進(jìn)行相應(yīng)的更改。

          具體來看數(shù)據(jù)提供源的四種對(duì)象

           

          Connect 對(duì)象

          Connect對(duì)象用來提供對(duì)數(shù)據(jù)庫的連接,Microsoft Visual Studio .Net中微軟提供了兩種Connect對(duì)象,分別為SqlConnection對(duì)象,用來提供對(duì)SQL Server 7.0或更高版本的連接,同時(shí)還有OleDbConnection對(duì)象,用來提供對(duì)Access與其他第三方數(shù)據(jù)庫的連接。

           

          Command 對(duì)象

          同樣,Command對(duì)象分為兩組,SqlCommandOleDbCommandCommand對(duì)象被用來執(zhí)行針對(duì)數(shù)據(jù)庫的命令,比如執(zhí)行數(shù)據(jù)庫的存儲(chǔ)過程(Stored Procedure)SQL命令,或者直接返回一個(gè)完整的表。Command對(duì)象提供三種方法(Methods)用來執(zhí)行上述操作。

          ExecuteNonQuery用來執(zhí)行一個(gè)不需返回?cái)?shù)據(jù)的命令,比如表的插入,更新或者刪除操作。

          ExecuteScalar返回從一個(gè)查詢得到的單獨(dú)的值。

          ExecuteReader用來返回一個(gè)從DataReader來的結(jié)果集。

           

          DataReader對(duì)象

          DataReader提供了forward-only, read-only, connected stream的結(jié)果集。

          這里的forward-only表示數(shù)據(jù)只能夠向前,如果我們?cè)L問了一條數(shù)據(jù)后想要再次訪問這條數(shù)據(jù)就必須重新開始。

          Read-only表示只讀,不能夠?qū)Y(jié)果集進(jìn)行操作。

          Connected stream表示DataReader對(duì)象是面向流連接的。所謂的流可以把它看作是管道,這邊放進(jìn)去東西那邊就可以得到,實(shí)際上TCP協(xié)議就是面向連接的流協(xié)議。

          不同于其他的三種對(duì)象,DataReader不能夠被用戶直接創(chuàng)建,必須也只能由ExecuteReader返回。

          SqlCommand.ExecuteReader返回SqlDataReader

          同理,OleDbCommand.ExecuteReader返回OleDbDataReader

          需要注意的是,DataReader對(duì)應(yīng)用程序提供行級(jí)訪問(每次只能訪問數(shù)據(jù)的一行),當(dāng)你需要多行的時(shí)候就需要多次的訪問這個(gè)對(duì)象。這樣做的好處就是內(nèi)存中永遠(yuǎn)只需要保留一行的數(shù)據(jù),缺點(diǎn)就是每次訪問都要開啟Connect的連接。

           

          DataAdapter對(duì)象

          DataAdapter對(duì)象是ADO.NET數(shù)據(jù)訪問的核心。實(shí)際上它是數(shù)據(jù)集與數(shù)據(jù)庫的中間層。DataAdapter可以使用Fill方法來為DataTable或者DataSet填充數(shù)據(jù)。然后當(dāng)內(nèi)存操作完成后DataAdapter可以確認(rèn)之前的操作從而對(duì)真正存于數(shù)據(jù)庫上的數(shù)據(jù)進(jìn)行修改。

          DataAdapter包含四種屬性用來代表不同的數(shù)據(jù)庫命令:

          SelectCommand用來查詢數(shù)據(jù)

          InsertCommand用來插入數(shù)據(jù)

          DeleteCommand用來刪除數(shù)據(jù)

          UpdateCommand用來更新數(shù)據(jù)當(dāng)Update方法被調(diào)用后,數(shù)據(jù)集中的數(shù)據(jù)被更改然后拷貝回?cái)?shù)據(jù)庫,緊接著使用InsertCommand, DeleteCommand, UpdateCommand中合適一個(gè)來進(jìn)行數(shù)據(jù)更新。

          posted on 2007-07-25 16:46 Picasso 閱讀(272) 評(píng)論(0)  編輯  收藏 所屬分類: .Net


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 门源| 六枝特区| 航空| 建始县| 营口市| 延川县| 响水县| 安塞县| 沐川县| 昭苏县| 图木舒克市| 蒲城县| 和田县| 张家口市| 青田县| 孝义市| 临汾市| 湟中县| 开远市| 青州市| 金坛市| 扎鲁特旗| 汉沽区| 佛冈县| 中方县| 大连市| 平乡县| 禹州市| 固安县| 高要市| 报价| 松阳县| 德江县| 靖州| 兴化市| 宜昌市| 南漳县| 江津市| 望谟县| 固原市| 富平县|