如何使用ADO訪問Oracle資料庫預存程序

來源:互聯網
上載者:User

 來源:網路/責編:編程入門 作者:不詳

  一、關於ADO

  在基於Client/Server結構的資料庫環境中,通過OLE DB介面可以存取資料,但它定義的是低層COM介面,不僅不易使用,而且不能被VB,VBA,VBScript等進階編程工具訪問。

  而使用ADO則可以很容易地使VB等程式設計語言直接存取資料(通過OLE DB介面)。ADO是基於物件導向方法的,其物件模型如所示(略)

  由可見,ADO物件模型總共才包括六個對象,相對於Data Access Objects(DAO)來說簡單得多。因此實際中常常使用它來訪問資料庫。

  二、ADO訪問資料庫執行個體

  下面,我們以Oracle為例,使用VB6.0來訪問其資料庫中的預存程序。在此例中,我們首先在Oracle資料庫上建立有兩個預存程序,一個不帶參數,另一個帶有參數。然後,使用ADO來訪問這兩個預存程序。步驟如下:

  1. 在Oracle伺服器上運行以下DDL指令碼:

  DROP TABLE person;
   CREATE TABLE person
   (ssn NUMBER(9) PRIMARY KEY,
   fname VARCHAR2(15),
   lname VARCHAR2(20));
   INSERT INTO person VALUES(555662222,'Sam','Goodwin');
   INSERT INTO person VALUES(555882222,'Kent','Clark');
   INSERT INTO person VALUES(666223333,'Jane','Doe');
   COMMIT;
   /

  2. 在Oracle伺服器上建立包(package):

  CREATE OR REPLACE PACKAGE packperson
   AS
   TYPE tssn is TABLE of NUMBER(10)
   INDEX BY BINARY_INTEGER;
   TYPE tfname is TABLE of VARCHAR2(15)
   INDEX BY BINARY_INTEGER;
   TYPE tlname is TABLE of VARCHAR2(20)
   INDEX BY BINARY_INTEGER;
  
   PROCEDURE allperson
   (ssn OUT tssn,
   fname OUT tfname,
   lname OUT tlname);
   PROCEDURE oneperson
   (onessn IN NUMBER,
   ssn OUT tssn,
   fname OUT tfname,
   lname OUT tlname);
   END packperson;
   /

3. 在Oracle伺服器上建立以下包體(package body):

  CREATE OR REPLACE PACKAGE BODY packperson
   AS
   PROCEDURE allperson
   (ssn OUT tssn,
   fname OUT tfname,
   lname OUT tlname)
   IS
   CURSOR person_cur IS
   SELECT ssn, fname, lname
   FROM person;
   percount NUMBER DEFAULT 1;
   BEGIN
   FOR singleperson IN person_cur
   LOOP
   ssn(percount) := singleperson.ssn;
   fname(percount) := singleperson.fname;
   lname(percount) := singleperson.lname;
   percount := percount + 1;
   END LOOP;
   END;
   PROCEDURE oneperson
   (onessn IN NUMBER,
   ssn OUT tssn,
   fname OUT tfname,
   lname OUT tlname)
   IS
   CURSOR person_cur IS
   SELECT ssn, fname, lname
   FROM person
   WHERE ssn = onessn;
   percount NUMBER DEFAULT 1;
   BEGIN
   FOR singleperson IN person_cur
   LOOP
   ssn(percount) := singleperson.ssn;
   fname(percount) := singleperson.fname;
   lname(percount) := singleperson.lname;
   percount := percount + 1;
   END LOOP;
   END;
   END;
   /

  4. 在 VB 6.0 中開啟一個新的工程,預設建立表單 Form1。

  5. 在表單上添加二個按鈕,cmdGetEveryone和cmdGetOne。

 6. 在代碼視窗中添加以下代碼:

  Option Explicit
   Dim Cn As ADODB.Connection
   Dim CPw1 As ADODB.Command
   Dim CPw2 As ADODB.Command
   Dim Rs As ADODB.Recordset
   Dim Conn As String
   Dim QSQL As String
   Dim inputssn As Long
  
   Private Sub cmdGetEveryone_Click()
   Set Rs.Source = CPw1
   Rs.Open
   While Not Rs.EOF
   MsgBox "Person data: " & Rs(0) & ",
   " & Rs(1) & ", " & Rs(2)
   Rs.MoveNext
   Wend
   Rs.Close
   End Sub
  
   Private Sub cmdGetOne_Click()
   Set Rs.Source = CPw2
   inputssn = InputBox(
   "Enter the SSN you wish to retrieve:")
   CPw2(0) = inputssn
   Rs.Open
   MsgBox "Person data: " & Rs(0) & "
   , " & Rs(1) & ", " & Rs(2)
   Rs.Close
   End Sub
  
   Private Sub Form_Load()
   '使用合適的值代替以下使用者ID,
   口令(PWD)和伺服器名稱(SERVER)
   Conn = "UID=*****;PWD=*****;driver=" _
   & "{Microsoft ODBC for
   Oracle};SERVER=dseOracle;"
   Set Cn = New ADODB.Connection
   '建立Connection對象
   With Cn
   .ConnectionString = Conn
   .CursorLocation = adUseClient
   .Open
   End With
   QSQL = "{call packperson.allperson(
   {resultset 9,ssn,fname,"_
   & "lname})}"
   Set CPw1 = New ADODB.Command
   '建立Command對象
   With CPw1
   Set .ActiveConnection = Cn
   .CommandText = QSQL
   .CommandType = adCmdText
   End With
   QSQL ="{call packperson.oneperson(?,
   {resultset 2,ssn, "_
   & " fname,lname})}"
   '調用預存程序
   Set CPw2 = New ADODB.Command
   With CPw2
   Set .ActiveConnection = Cn
   .CommandText = QSQL
   .CommandType = adCmdText
   .Parameters.Append.CreateParameter(
   ,adInteger, _
   adParamInput)
   '添加預存程序參數
   End With
   Set Rs = New ADODB.Recordset
   With Rs
   .CursorType = adOpenStatic
   .LockType = adLockReadOnly
   End With
   End Sub
  
   Private Sub Form_Unload(Cancel As Integer)
   Cn.Close
   Set Cn = Nothing
   Set CPw1 = Nothing
   Set CPw2 = Nothing
   Set Rs = Nothing
   End Sub

  7. 運行程式。當點下cmdGetEveryone按鈕時,程式調用Oracle資料庫中不帶參數的預存程序packperson.allperson,點下cmdGetOne按鈕時調用packperson.oneperson預存程序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.