文章編號: 167225 - 上次校閱: 2005年3月2日 - 版次: 1.3

如何存取使用 RDO Oracle 資料庫

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

使用 Visual Basic 5.0 和較高的企業版,您能夠連線到 Oracle 資料庫透過 DSN 的連接、 執行預存程序使用參數,並從該預存程序取得傳回值。本文中的範例說明所有的這項功能。

其他相關資訊

本文中的範例是簡單的 Visual Basic 專案,會建立針對 Oracle 資料庫的 DSN 的連接,並執行預存程序。使用 Oracle 和 Microsoft ODBC 驅動程式,Oracle 時, 有一些不同於使用 Microsoft SQL Server 的設定。您使用不同的 ODBC 驅動程式,就會發生這些差異。

Visual Basic 5.0 及以上企業版包含可用於 Oracle RDO 2.0] 和 [Microsoft ODBC 驅動程式。這兩者需要安裝若要執行本文中的範例專案。

注意: [ODBC 驅動程式從 Oracle 不支援整個 RDO 2.0 功能集 (包括預存程序呼叫及繫結傳回值)。

下列範例建立針對透過 SQL 的 Oracle 7.3 資料庫 * Net 2.3 連線。所有下列程式碼 (包括預存程序) 應該與 Oracle 7.2 正常進行運作。但 Microsoft ODBC 驅動程式的 Oracle [說明] 檔案指出它只支援 SQL * Net 2.3

有兩個需要在 Oracle 資料庫上建立的物件 ; 資料表 (rdooracle) 和預存程序 (rdoinsert)。以下是資料定義語言 (DDL) 指令碼,來建立這些物件:
  • RDOORACLE: 這是只是兩個資料行具有表格設定主索引鍵的第一欄:
          CREATE TABLE rdooracle (
                    item_number    NUMBER(3) PRIMARY KEY,
                    depot_number   NUMBER(3));
    					
  • RDOINSERT: 此程序接受單一的數字輸入的參數並傳回單一數值的輸出參數。輸入的參數首先由輸入陳述式,然後它會除以 2,並將設為輸出參數:
          CREATE OR REPLACE PROCEDURE rdoinsert
             (insnum IN NUMBER, outnum OUT NUMBER)
          IS
          BEGIN
          INSERT INTO rdooracle
             (Item_Number, Depot_Number)
          VALUES
             (insnum, 16);
          outnum := insnum/2;
          END;
    					
注意: 您使用 Oracle 和 RDO 預留位置參數時必須使用具有輸出參數的程序和不函式。

上述指令碼可以執行從 SQL * 加號或從內 Visual 資料庫工具增益集在 Visual Basic 5.0 企業版中。一旦建立這些物件您可以建立使用它們的 Visual Basic 專案。

雖說是逐步範例

此範例專案使用簡單表單來傳送繫結的參數,[RDOINSERT 預存程序和再從該程序傳回輸出參數。若要建立專案步驟如下:
  1. 在 Visual Basic 5.0 企業版中開啟一個新的專案。預設會建立 Form1。
  2. 將下列控制項在表單上:
          Control     Name     Text/Caption
          ---------------------------------
          Button      cmdCheck  Check
          Button      cmdSend   Send
          Text Box    txtInput
          Label       lblInput  Input:
    					
  3. 從 [工具] 功能表選取 [選項] 項目]。按一下 [全模組檢視預設值] 選項,然後按一下 [確定]。這可讓您檢視所有對此專案程式碼。
  4. 下列程式碼貼入您的程式碼視窗:
          Option Explicit
          Dim Cn As rdoConnection
          Dim En As rdoEnvironment
          Dim CPw As rdoQuery
          Dim Rs As rdoResultset
          Dim Conn As String
          Dim QSQL As String
          Dim Response As String
          Dim Prompt As String
    
          Private Sub cmdCheck_Click()
    
              QSQL = "Select Item_Number, Depot_Number From rdooracle Where " _
              & "item_number =" & txtInput.Text
              Set Rs = Cn.OpenResultset(QSQL, rdOpenStatic, , rdExecDirect)
    
              Prompt = "Item_Number = " & Rs(0) & ".  Depot_Number = " _
              & Rs(1) & "."
    
              Response = MsgBox(Prompt, , "Query Results")
    
              Rs.Close
    
          End Sub
    
          Private Sub cmdSend_Click()
    
              CPw(0) = Val(txtInput.Text)
              CPw.Execute
    
              Prompt = "Return value from stored procedure is " & CPw(1) & "."
              Response = MsgBox(Prompt, , "Stored Procedure Result")
    
          End Sub
    
          Private Sub Form_Load()
    
              Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
                   & "CONNECTSTRING=MyOracle;"
    
              Set En = rdoEnvironments(0)
              Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn)
              QSQL = "{call rdoinsert(?,?)}"
              Set CPw = Cn.CreateQuery("", QSQL)
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
    
              En.Close
    
          End Sub
    
    					
  5. 執行專案。
當您 txtInput,[文字] 方塊中輸入一個數字,並按一下"傳送"按鈕時,稱為 Oracle 預存程序 RDOINSERT。在編號中所輸入文字] 方塊中當做輸入參數的程序。 輸出參數用在預存程序已完成處理後呼叫的訊息方塊中。以您仍在文字方塊中的原始值,按一下 [檢查] 按鈕]。這會建立簡單的唯讀結果集顯示在另一個訊息方塊。

下列是這個示範專案中使用的程式碼的詳細的說明:

Form_Load 事件包含的程式碼,會建立 DSN 的連接。 它也包含程式碼會建立呼叫預存程序的查詢:
    Private Sub Form_Load()

       Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
            & "CONNECTSTRING=MyOracle;"

       Set En = rdoEnvironments(0)
       Set Cn = En.OpenConnection("", rdDriverPrompt, False, Conn)
       QSQL = "{call rdoinsert(?,?)}"
       Set CPw = Cn.CreateQuery("", QSQL)

   End Sub
				
附註您不使用 rdPreparedStatement 物件。這個物件已經由 rdoQuery 物件所取代。這是 RDO 2.0 的新功能。而且,RDO 2.0 與您不需要明確地建立連接物件,此專案中完成。您可以建立一個獨立的查詢物件,它不是特別相關聯的連接。若要進一步了解這項功能,查閱 rdoQuery Visual Basic 5.0 企業版的說明檔中的物件。

用來開啟一個連線到 Oracle 資料庫 (或任何資料庫) 的連接字串是非常依據基礎 ODBC 驅動程式。即使類似參數由大多數的 ODBC 驅動程式 (UID、 PWD 等),此處使用的連接字串將只與 Microsoft ODBC 驅動程式一起 Oracle:
Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _
            & "CONNECTSTRING=MyOracle;"
				
此連接字串的最重要部份是 CONNECTSTRING"關鍵字。它用於只能由 Microsoft ODBC 驅動程式 Oracle。對於 Microsoft SQL Server 6.5 您使用關鍵字 「 伺服器]。指派給 CONNECTSTRING 字串是您在 SQL 中設定 [資料庫別名 * 網路。當連線到 Oracle 資料庫時,這將會在連接字串中唯一的差別。所有其他參數操作 Visual Basic 5.0 企業版的 [說明] 檔案 (在下 rdoConnection 物件) 中所述。如果是連線的 [說明] 檔案所述您沒有在連接字串中指定 DSN。

也在 Form_Load 事件是程式碼來建立查詢物件呼叫預存程序:
   QSQL = "{call rdoinsert(?,?)}"
   Set CPw = Cn.CreateQuery("", QSQL)
				
與 Oracle 您就無法指定為預存程序呼叫的傳回值,,您可以使用 Microsoft SQL Server 6.5 ; 您必須使用具有輸出參數,如本文稍早所述的預存程序。由表示參數替代符號 QSQL 字串中的一個"?",而且它們它們出現在字串中參考的順序。如需使用 rdoQuery 物件中的參數替代符號的詳細資訊,參考 rdoParameter 物件在 Visual Basic 5.0 企業版的說明檔中。

專案的其餘部分是相當直接轉寄和制訂在線上 [說明] 檔案及線上叢書 》,這兩種隨附 Visual Basic 5.0。重要的是要處理 Oracle、 連接的字串和預存程序呼叫的 RDO 問題有過詳細此專案中。這些問題的詳細資訊,請參考 Oracle SQL * Net 2.3 說明文件、 Microsoft ODBC 驅動程式,Oracle,和 Oracle 7 伺服器文件的說明檔。

?考

Visual Basic 5.0 企業版說明檔案

先知 SQL * Net 2.3 [說明] 檔案

Visual Basic 和 SQL Server-第四版 hitchhiker 的指南。

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
關鍵字:?
kbmt kbhowto kboracle KB167225 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:167225? (http://support.microsoft.com/kb/167225/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。