天天看點

ASP.NET通路Oracle資料庫的方法

引言

microsoft.netframeworkdataproviderfororacle(以下簡稱為.netfororacle)是一個.netframework的元件。這個元件為我們使用.net通路oracle資料庫提供了極大的友善。那些使用.net和oracle的開發人員,相信會樂的手舞足蹈,因為他們再也不必使用那個并不十分“專業="的oledb來通路oracle資料庫了。這個元件的設計非常類似.net中内置的microsoft.netframeworkdataproviderforsqlserver和oledb。如果讀者非常熟悉這兩個内置的元件,那麼相信您學習這個元件也是輕車熟路的。

本文針對的讀者主要是那些考慮使用.net技術通路oracle資料庫的程式員而編寫,需要有一定的c#語言、ado.net技術和oracle資料庫基礎知識。文中結合asp.net技術給出了相關示例以及具體的注釋。當然,這并不意味着.netfororacle元件隻能為編寫asp.net程式提供服務,同樣它還可以為使用.net技術編寫的windows程式提供友善。

本文将簡要介紹asp.netfororacle的系統需求和安裝以及核心類,之後重點詳解使用此元件通路oracle資料庫的方法。其中包括.netfororacle對于各種oracle資料庫中的特殊資料類型的通路、各種核心類使用方法的介紹并且在文章的最後給出了示例等等。

--------------------------------------------------------------------------------

系統需求和安裝

在安裝.netfororacle之前,必須首先安裝.netframeworkversion1.0。同時,還要确定安裝了資料通路元件(mdac2.6及其以上版本,推薦版本是2.7)。既然是要通路oracle資料庫的資料,那麼還需要安裝oracle8irelease3(8.1.7)client及其以上版本。目前oracle9i已經釋出,作者本人安裝的是oracle9i,本文中所有的程式,都是在oracle9i資料庫環境下編寫和調試完成的。

元件的安裝非常友善,直接運作oracle_net.msi。在安裝過程中無需任何設定,一路點選“next="完成安裝即可。預設安裝将在c:/programfiles/microsoft.net目錄下建立一個名為oracleclient.net的檔案夾,其中包含以下六個檔案,具體的注釋如下表:

注意:mtxoci8.dll檔案并未安裝在預設檔案夾中,而是安裝在系統目錄中,例如:c:/windows/system32目錄中。

對于開發人員,其中至關重要的是system.data.oracleclient.dll檔案。這是.netfororacle元件的核心檔案。使用時,開發人員可以通過安裝oracle_net.msi來使用.netfororacle元件,這時系統會将此元件作為一個系統預設的元件來使用,就好像是我們所熟悉的system.data.sqlclient和system.data.oledb元件一樣。但是,需要注意的一點是:當開發人員完成了程式之後分發給使用者使用時,出于對于軟體易用性的考慮,我們是不希望當使用者使用此軟體之前,還要如同開發人員一樣安裝oracle_net.msi。這時開發人員可以在釋出之前,将system.data.oracleclient.dll檔案複制到軟體的bin目錄下。這樣使用者就可無需安裝oracle_net.msi而正常的使用軟體所提供的功能了。(這種方法限于開發的程式不涉及分布式事務)

核心類介紹

.netfororacle元件中用于組織類和其他類型的名字空間是system.data.oracleclient。在此名字空間中,主要包含四個核心類,它們分别是:oracleconnection、oraclecommand、oracledatareader、oracledataadapter。如果開發人員很了解ado.net技術,那麼對于這四個類的使用将是耳熟能詳的。這些内容非常簡單,其具體使用方法幾乎和sqlconnection、sqlcommand、sqldatareader、sqldataadapter是一模一樣的。這裡就不再詳細說明,讀者将在後文中通過示例了解使用這些類的有關情況,這裡隻給出下表以供讀者簡要了解。

舉例說明

下面是一個使用.netfororacle元件操縱oracle資料庫的例子。在寫程式之前,先要在oracle資料庫中建立一個表,并且加入一行資料。使用下面的語句。

建立一個名為oracletypestable的表

"createtableoracletypestable(myvarchar2varchar2(3000),mynumbernumber(28,4)

primarykey,mydatedate,myrawraw(255))";

插入一行資料

"insertintooracletypestablevalues('test',4,to_date('2000-01-11

12:54:01','yyyy-mm-ddhh24:mi:ss'),'0001020304')";

下面的程式就是要通過.netfororacle元件來通路oracle資料庫,并且顯示出這行資料。在程式中請注意前文中所說明的類,并且聯想.net中關于資料處理類的使用方法。

1.usingsystem;

2.usingsystem.web;

3.usingsystem.web.ui;

4.usingsystem.web.ui.htmlcontrols;

5.usingsystem.web.ui.webcontrols;

6.usingsystem.data;

7.usingsystem.data.oracleclient;

8.publicclasspic2:page{

9.publiclabelmessage;

10.publicvoidpage_load(objectsender,eventargse)

11.{

//設定連接配接字元串

12.stringconnstring="datasource=eims;user=zbmis;password=zbmis;";

//執行個體化oracleconnection對象

13.oracleconnectionconn=neworacleconnection(connstring);

14.try

15.{

16.conn.open();

//執行個體化oraclecommand對象

17.oraclecommandcmd=conn.createcommand();

18.cmd.commandtext="select*fromzbmis.oracletypestable";

19.oracledatareaderoracledatareader1=cmd.executereader();

//讀取資料

20.while(oracledatareader1.read()){

//讀取并顯示第一行第一列的資料

21.oraclestringoraclestring1=oracledatareader1.getoraclestring(0);

22.response.write("oraclestring"+oraclestring1.tostring());

//讀取并顯示第一行第二列的資料

23.oraclenumberoraclenumber1=oracledatareader1.getoraclenumber(1);

24.response.write("oraclenumber"+oraclenumber1.tostring());

//讀取并顯示第一行第三列的資料

25.oracledatetimeoracledatetime1=oracledatareader1.getoracledatetime(2);

26.response.write("oracledatetime"+oracledatetime1.tostring());

//讀取并顯示第一行第四列的資料

27.oraclebinaryoraclebinary1=oracledatareader1.getoraclebinary(3);

28.if(oraclebinary1.isnull==false)

29.{

30.foreach(bytebinoraclebinary1.value)

31.{

32.response.write("byte"+b.tostring());

33.}

34.}

35.}

//釋放資源

36.oracledatareader1.close();

37.}

38.catch(exceptionee)

39.{

//異常處理

40.message.text=ee.message;

41.}

42.finally

43.{

//關閉連接配接

44.conn.close();

45.}

46.}

47.}

如果您對于.net中資料操作的内容很熟悉,那麼相信上面的程式是完全看得懂的。是以在這裡分析上面代碼意義不是很大。

請那些既使用.net又使用oracle的讀者記住:.netfororacle元件的設計非常類似.net中内置的dataproviderforsqlserver和oledb。