HOW TO:使用 .NET Managed Provider For Oracle 從 Oracle 預存程序擷取多重 Ref_cursors

文章翻譯 文章翻譯
文章編號: 321715 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何使用 .NET Data Provider for Oracle 從 Oracle 預存程序擷取多重 Ref Cursor,以及如何使用 Dataset 物件的 Relations 屬性在 Ref Curso 傳回的二個表格之間建置關係。

需求

下面清單列出了建議使用的硬體、軟體、網路基礎架構以及所需安裝的 Service Pack:
  • Microsoft Windows 2000 Professional、Microsoft Windows 2000 Server、Microsoft Windows 2000 Advanced Server 或 Microsoft Windows XP Professional
  • Microsoft Visual Studio .NET
  • Oracle Client 8.1.7 或更新版本
  • .NET Data Provider for Oracle (您可以從 「Microsoft 下載中心」下載這個版本)
本文假設您已熟悉下列主題:
  • Microsoft Visual Basic .NET
  • ADO.NET 基礎和語法

建立 Oracle 表格

這個範例使用 Oracle Scott/Tiger 結構描述中定義的表格。 根據預設,安裝標準 Oracle 時包含 Oracle Scott/Tiger 結構描述。

如果這個結構描述不存在,您就必須執行下列表格並且插入表格的指令碼:
   CREATE TABLE DEPT
   (DEPTNO NUMBER(2,0) NOT NULL, 
   DNAME VARCHAR2(14) NULL, 
   LOC VARCHAR2(13) NULL,
   PRIMARY KEY (DEPTNO)
   );

   INSERT INTO Dept VALUES(11,'Sales','Texas');
   INSERT INTO Dept VALUES(22,'Accounting','Washington');
   INSERT INTO Dept VALUES(33,'Finance','Maine');

   CREATE TABLE EMP
   (EMPNO NUMBER(4,0) NOT NULL, 
   ENAME VARCHAR2(10) NULL, 
   JOB VARCHAR2(9) NULL, 
   MGR NUMBER(4,0) NULL, 
   HIREDATE DATE,
   SAL NUMBER(7,2) NULL, 
   COMM NUMBER(7,2) NULL, 
   DEPTNO NUMBER(2,0) NULL,
   FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO),  
   PRIMARY KEY (EMPNO)
   ); 

   INSERT INTO Emp VALUES(123,'Bob','Sales',555,sysdate,35000,12,11);
   INSERT INTO Emp VALUES(321,'Sue','Finance',555,sysdate,42000,12,33);
   INSERT INTO Emp VALUES(234,'Mary','Account',555,sysdate,33000,12,22);
				

建立 Oracle 封裝

在 Oracle 伺服器上建立下列 Oracle 封裝:
 CREATE OR REPLACE PACKAGE MultiRefCursors AS 
        TYPE Emp_cursor IS REF CURSOR ; 
     TYPE Dept_cursor IS REF CURSOR ; 
        Procedure EmpDept (io_cursor1 IN OUT Emp_cursor, io_cursor2 IN OUT Dept_cursor); 
   END MultiRefCursors;
   / 
				
在 Oracle 伺服器上建立下列 Oracle 封裝主體:
   CREATE OR REPLACE PACKAGE BODY MultiRefCursors AS
   Procedure EmpDept (io_cursor1 IN OUT Emp_cursor, io_cursor2 IN OUT Dept_cursor) 
   IS 
        E_cursor Emp_cursor;
     D_Cursor Dept_Cursor;
   BEGIN 
        
        
             OPEN E_cursor FOR 
             SELECT * from Emp;

         
             OPEN D_cursor FOR 
             SELECT * from Dept;

        io_cursor1 := E_cursor;
     io_cursor2 := D_cursor;
   END EmpDept; 
   END  MultiRefCursors;
   / 
				

建立 Visual Basic .NET 應用程式

  1. 建立新的 Visual Basic Windows 應用程式專案。 根據預設,Form1 新增至專案中。
  2. [專案] 功能表上按一下 [新增參考],設定參考 System.Data.OracleClient。
  3. 在表單上新增指令按鈕和 Datagrid 物件。
  4. 在 [程式碼] 視窗上新增下列程式碼:
    Imports System.Data.OracleClient
    					
  5. 在 Form1 的 Button1_Click 事件上新增下列程式碼 :
            Dim Ds As New DataSet()
            Dim Oraclecon As New OracleConnection("Data Source=YourOracle;User ID=scott;Password=tiger")
           
            Oraclecon.Open()
    
    
            Dim myCMD As New OracleCommand()
            myCMD.Connection = Oraclecon
            myCMD.CommandText = "multiRefCursors.EmpDept"
            myCMD.CommandType = CommandType.StoredProcedure
            myCMD.Parameters.Add(New OracleParameter("io_cursor1", OracleType.Cursor)).Direction = ParameterDirection.Output
            myCMD.Parameters.Add(New OracleParameter("io_cursor2", OracleType.Cursor)).Direction = ParameterDirection.Output
    
            Dim MyDA As New OracleDataAdapter(myCMD)
    
            Try
                MyDA.Fill(Ds)
            Catch Myex As Exception
                MessageBox.Show(Myex.Message.ToString)
            End Try
    
    
            Ds.Relations.Add("EmpDept", Ds.Tables(0).Columns("Deptno"), Ds.Tables(1).Columns("Deptno"))
            DataGrid1.DataSource = Ds.Tables(0)
            Oraclecon.Close()
    					
  6. 視環境需要,修改 OracleConnection 字串。
  7. 按 F5 編譯及執行應用程式。

?考

如需詳細資料,請按一下下面文件編號,以檢視 Microsoft Knowledge Base 中的文件:
321718 HOW TO: Call Oracle Stored Procedures in Visual Basic .NET with the Microsoft Oracle Managed Provider

屬性

文章編號: 321715 - 上次校閱: 2003年8月11日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft Visual Studio .NET 2002 Professional Edition
關鍵字:?
kbhowto kbhowtomaster kboracle kbsystemdata KB321715
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com