使用 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 預存程序和再從該程序傳回輸出參數。若要建立專案步驟如下:
- 在 Visual Basic 5.0 企業版中開啟一個新的專案。預設會建立 Form1。
- 將下列控制項在表單上:
Control Name Text/Caption
---------------------------------
Button cmdCheck Check
Button cmdSend Send
Text Box txtInput
Label lblInput Input:
- 從 [工具] 功能表選取 [選項] 項目]。按一下 [全模組檢視預設值] 選項,然後按一下 [確定]。這可讓您檢視所有對此專案程式碼。
- 下列程式碼貼入您的程式碼視窗:
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
- 執行專案。
當您 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 的指南。