.net之oraclecommand訪問oracle

wisdomone1發表於2011-07-28

 

     本文討論瞭如何使用 ADO.NET 訪問 Oracle 儲存過程(稱為 SQL 塊)和函式(返回單個值的程式設計塊)。

您可以使用以下託管資料提供程式連線到 Oracle :Microsoft .NET Oracle 提供程式、OLE DB .NET 提供程式、ODBC .NET 資料提供程式以及 Oracle 的 ODP.NET 提供程式。本文使用用於 Oracle 的 Microsoft?.NET 框架資料提供程式。使用 Oracle ODP.NET 資料提供程式或用於 OLE DB 的 Microsoft .NET 框架資料提供程式時可使用不同的功能。



Oracle .NET 資料提供程式隨 .NET 框架 1.1 一起提供。如果您使用的是 .NET 框架 1.0,您將需要下載 .NET Managed Provider for Oracle。無論是哪個版本,資料提供程式類都位於 System.Data.OracleClient 名稱空間中。

概述
PL/SQL 是 SQL 的 Oracle 實現。它與 Microsoft?SQL Server? 所使用的 T-SQL 類似,但也有一些不同之處,本文稍後對此進行了詳細討論。與 T-SQL 一樣,PL/SQL 擴充套件了標準 SQL。PL/SQL 用於定義命名程式設計塊,如儲存過程、函式和觸發器。


可使用 System.Data.OracleClient 名稱空間中類的子集來執行 Oracle 儲存過程和函式。下表對這些類進行了說明:

類 說明
OracleCommand
 針對 Oracle 資料庫執行的儲存過程的 SQL 語句。
 
OracleConnection
 開啟的資料庫連線。
 
OracleParameter
 OracleCommand 的引數,也可能是它到 DataColumn 的對映。
 
OracleParameterCollection
 OracleParameter 物件的集合。
 
OracleType
 Oracle 資料型別和結構的列舉。
 


執行儲存過程
執行 Oracle 儲存過程與執行 SQL Server 儲存過程類似。下面的步驟說明了如何執行 Oracle 儲存過程和檢索它返回的結果。

1.
 在 HR 架構中建立一個名為 COUNT_JOB_HISTORY 的儲存過程,以計算 JOB_HISTORY 表中的記錄數。

CREATE OR new PROCEDURE COUNT_JOB_HISTORY
(
   reccount OUT NUMBER
)
IS
BEGIN
   SELECT COUNT(*) INTO reccount
   FROM JOB_HISTORY;
END COUNT_JOB_HISTORY;

HR 架構是預設 Oracle 中包含的一個示例。
 
2.
 將 System.Data.OracleClient.dll(用於 Oracle 的 Microsoft .NET 框架資料提供程式)的引用新增到專案中。
 
3.
 使用 using 指令匯入 OracleClient 類中的型別。

using System.Data.OracleClient;


4.
 建立一個 OracleConnection 物件。

OracleConnection conn = new OracleConnection("Data Source=oracledb;
   User Id=UserID;Password=Password;");

用您的值替換 Oracle 資料庫的名稱、使用者名稱和密碼。
 
5.
 創 建一個 OracleCommand 物件。將其 Connection 屬性設定為第 4 步中建立的連線。將其 CommandText 設定為儲存過程的名稱,並將其 CommandText 屬性設定為 CommandType.StoredProcedure。當您呼叫第 8 步中介紹的一個 Execute() 方法時,該命令物件將執行指定的儲存過程。

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;

如果您的儲存過程名稱含有特殊字元,您就必須使用轉義序列。您可以透過重置 CommandText 屬性來重用現有的 OracleCommand 物件。
 
6.
 建立輸入、輸出和返回值的 OracleParameter 物件,並將其新增到 OracleCommand 物件的引數集合中。

cmd.Parameters.Add("reccount", OracleType.Number).Direction =
   ParameterDirection.Output;

該行是以下兩行程式碼的簡寫形式:

cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;


7.
 如果您要檢索結果集,請建立 DataSet、DataTable 或 DataReader。在本示例中,我們只是獲取第 6 步中建立的輸出引數中的計數。
 
8.
 使用 OracleCommand 物件的一個 Execute 方法開啟連線並執行儲存過程,如下所示:

方法 說明
ExecuteReader
 透過執行能夠返回結果集的儲存過程生成 OracleDataReader。
 
ExecuteNonQuery
 執行不返回結果集的查詢或過程,返回受影響的行數。
 
ExecuteOracleNonQuery

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-703292/,如需轉載,請註明出處,否則將追究法律責任。

相關文章