關(guān)于更新ADO.NET數(shù)據(jù)源方法介紹
大家都知道ADO.NET是訪問數(shù)據(jù)庫的一種技術(shù),想要學(xué)好編程我們首先就要會(huì)訪問數(shù)據(jù)庫,現(xiàn)在我們就來看看關(guān)于ADO.NET吧。在ADO中,有三種可能方式用于更新ADO.NET數(shù)據(jù)源。一個(gè)是通過直接SQL語句,如INSERT, DELETE 或 UPDATE,或稍復(fù)雜、較成熟的存儲(chǔ)過程。另一個(gè)是通過批更新,你一次可以向服務(wù)器遞交某個(gè)表的新映射。第三個(gè)方法是使用服務(wù)器指針直接對字段更新。
#T#ADO.NET完全支持前兩種技術(shù),這涉及到不是的對象和方法。至于服務(wù)器指針,需要做進(jìn)一步的討論和確認(rèn),但到目前為止,在ADO .NET中它們只得到有限的支持。下面開始分析更新ADO .NET中數(shù)據(jù)源的方法和技術(shù)。本月,我將重點(diǎn)放在直接SQL命令和存儲(chǔ)過程上。在以后的專欄中,我將同時(shí)詳細(xì)介紹批更新和服務(wù)器指針。
OLE DB 和"管理"提供者
ADO .NET并不直接支持OLE DB提供者,但這并不是說你不能從ADO .NET中訪問OLE DB提供者。對此,我只是要表明一個(gè)特殊的管理提供者總是對訪問任何現(xiàn)有的有效OLE DB提供的調(diào)用進(jìn)行預(yù)處理。出于這個(gè)原因,你的ADO .NET永遠(yuǎn)不會(huì)直接作為一個(gè)OLE DB客戶。
管理提供者是在。NET中工作的一種模塊,它的工作方式與OLE DB在Win32? 和 COM環(huán)境中的工作方式相同。從任何角度來說,管理提供者是OLE DB的。NET對應(yīng)物。它們是簡化了的組件,并不象OLE DB那樣遵循復(fù)雜的通用的規(guī)范(如通用數(shù)據(jù)訪問)。更重要的是,管理提供者完全能在。NET的通用語言運(yùn)行時(shí)(Common Language Runtime ,CLR)環(huán)境中工作。相反,OLE DB提供者是一個(gè)老COM對象,在。NET環(huán)境中,它只能運(yùn)行在非管理窗口中。
為了訪問ADO.NET中的數(shù)據(jù),你應(yīng)當(dāng)遵循典型ADO會(huì)話中的同樣步驟。首先,創(chuàng)建鏈接,通過連接字符串指定參數(shù)。接著,實(shí)例化命令對象,設(shè)置正確的命令字和行為,然后執(zhí)行。最后,根據(jù)命令的期望輸出,或者你操縱結(jié)果,或者關(guān)閉鏈接,將其余工作留給應(yīng)用程序?! ∽⒁猓贏DO中可以減少一些步驟,如直接調(diào)用Connection對象的Execute方法。這種做法在ADO .NET中是不允許的,因?yàn)椴⒉皇撬蓄愋偷腃onnection對象具有Execute方法。
不同類型的鏈接對象?這又意味著什么呢?
ADO .NET要求你在鏈接時(shí)事先知道并指定將鏈接到的(管理)數(shù)據(jù)提供者的類型。在ADO中,你擁有Connection對象,這就足夠了,而不必考慮獲得和設(shè)置數(shù)據(jù)的物理通道。不論是使用OLE DB ,還是歸結(jié)為ODBC,通過供ODBC使用的通用OLE DB提供者,ADO 總是要求使用同種類型的Connection對象。在ADO .NET中情況就不是這樣了。
到目前為止,有兩種類型的管理提供者,一個(gè)專門用于SQL Server 7.0 和 2000,另一個(gè)用于訪問任何OLE DB提供者。通過管理提供者,容易辨別出這種設(shè)計(jì)方式與在ADO中允許ODBC數(shù)據(jù)源訪問OLE DB的方式是相同的。用于訪問ODBC數(shù)據(jù)源的第三方管理提供者現(xiàn)在處于測試階段。事實(shí)上,用于OLE DB的管理提供者不支持ADO中用于同ODBC驅(qū)動(dòng)對話的MSDASQL OLE DB提供者。
SQL Server是在System.Data.SqlClient名稱空間中定義它的類的。OLE DB 管理提供者大部分定義在System.Data.OleDb名稱空間中。在ADO .NET中,不存在通用而又有用的鏈接類。存在一個(gè)DBConnection類,其它其它特定于提供者的鏈接類從該類派生,但它是一個(gè)抽象類。作為原形設(shè)計(jì),它是有用的,但它不會(huì)直接在應(yīng)用程序中使用。因此,為打開一個(gè)鏈接,必須使用下面的兩個(gè)方法之一:SqlConnection 方法和 OleDbConnection方法。如果目標(biāo)是SQL Server 7.0, SQL Server 2000或更高版本,使用前者。如果目標(biāo)是OLE DB提供者,就應(yīng)當(dāng)使用后者。如果需要通過ODBC驅(qū)動(dòng)器訪問數(shù)據(jù),就要使用ODBC .NET提供者的鏈接類(名為OdbcConnection)。
要訪問SQL Server數(shù)據(jù)庫,使用直接管理提供者將產(chǎn)生更加有效的代碼。然而,注意如果需要訪問SQL Server6.5,那么就必須求助于OLE DB提供者,并使用OleDbXxx類和用于OLE DB的管理提供者。因此,在ADO .NET中有許多成對的類,如SqlConnection 和 OleDbConnection, SqlCommand 和 OleDbCommand, SqlDataReader 和 OleDbDataReader等等。盡管不同的對間最大的不同可能在于它的前綴,但如果說它們對編程接口是相同的,卻是不對的??梢源_定的是,每對類做同樣的事情,但它們所有的接口反映的是底層的數(shù)據(jù)提供者。例如,在SqlConnection對象上沒有Provider屬性,而在類中沒有PacketSize 或 WorkStationId 概念。
在本文的后面部分,我將使用SQL Server管理提供者,這將意味著面向數(shù)據(jù)的ADO .NET類將帶有Sql前綴。在先前否認(rèn)聲明有效的前提下,不需要對代碼進(jìn)行修改或進(jìn)行有限修改,它就能工作,對于由OLE DB提供者暴露的ADO.NET數(shù)據(jù)源也是一樣的。