如何使用ADO訪問Oracle數據庫存儲過程

---- 一、關于ADO

---- 在基于Client/Server結構的數據庫環境中,通過OLE DB接口可以存取數據,但它定義的是低層COM接口,不僅不易使用,而且不能被VB,VBA,VBScript等高級編程工具訪問。

而使用ADO則可以很輕易地使VB等編程語言直接訪問數據(通過OLE DB接口)。ADO是基于面向對象方法的,其對象模型如下圖所示(略)

---- 由上圖可見,ADO對象模型總共才包括六個對象,相對于數據訪問對象(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存儲過程。

如何使用ADO訪問Oracle數據庫存儲過程
  ---- 一、關于ADO  ---- 在基于Client/Server結構的數據庫環境中,通過OLE DB接口可以存取數據,但它定義的是低層COM接口,不僅不易使用,而且不能被VB,VBA,VBScript等高級編程工具訪問。而使用ADO則可以很容...查看完整版>>如何使用ADO訪問Oracle數據庫存儲過程
 
如何使用Ruby腳本調用Oracle存儲過程
使用Ruby腳本調用Oracle存儲過程的示例: 1.首先創建Oracle存儲過程test: SQL> CREATE OR REPLACE PROCEDURE test(p1 in varchar2,p2 out varchar2 ) is2 BEGIN3 select p1||' PROCEDURE EXECUTED!' into p...查看完整版>>如何使用Ruby腳本調用Oracle存儲過程
 
使用OLE對象訪問Oracle數據庫
  OLE即對象聯接和嵌入技術,使用這一技術,我們在VB中不用任何控件就可輕松訪問Oracle數據庫的內容。在安裝了Oracle的Oracle Object for OLE後,就可以使用Oracle提供的OLE對象方便地訪問數據庫的內容了。    ...查看完整版>>使用OLE對象訪問Oracle數據庫
 
使用OLE對象訪問Oracle數據庫
  OLE即對象聯接和嵌入技術,使用這一技術,我們在VB中不用任何控件就可輕松訪問Oracle數據庫的內容。在安裝了Oracle的Oracle Object for OLE後,就可以使用Oracle提供的OLE對象方便地訪問數據庫的內容了。  運行...查看完整版>>使用OLE對象訪問Oracle數據庫
 
如何使用Oracle數據庫中空間管理的方法
在Oracle數據庫中,DBA可以通過觀測一定的表或視圖來了解當前空間的使用狀況,進而作出可能的調整決定。 一.表空間的自由空間 通過對表空間的自由空間的觀察,可用來判定分配給某個表空間的空間是太多還是不夠。請看...查看完整版>>如何使用Oracle數據庫中空間管理的方法
 
如何在Delphi中調用oracle的存儲過程返回數據集
   選自CSDN http://search.csdn.net/EXPert/topic/2280/2280860.XML?temp=2.169436E-02 論壇中JCC0128 網友的發言【Delphi+Oracle報表解決方案(一)】delphi中調用oracle的存儲過程(分帶返回遊標,不返回值兩種) ...查看完整版>>如何在Delphi中調用oracle的存儲過程返回數據集
 
如何在Delphi中調用oracle的存儲過程返回數據集
如何在Delphi中調用oracle的存儲過程返回數據集 如何在Delphi中調用oracle的存儲過程返回數據集 選自CSDN http://search.csdn.net/Expert/topic/2280/2280860.xml?temp=2.169436E-02 論壇中JCC0128 網友的發...查看完整版>>如何在Delphi中調用oracle的存儲過程返回數據集
 
如何在Delphi中調用oracle的存儲過程返回數據集
選自CSDN 網友的發言【delphi+oracle報表解決方案(一)】delphi中調用oracle的存儲過程(分帶返回遊標,不返回值兩種) 關鍵字: delphi ,oracle存儲過程,遊標,返回數據集,報表注:delphi 6+ oracle 8.1.6一.創建包與包...查看完整版>>如何在Delphi中調用oracle的存儲過程返回數據集
 
如何使用Sybase ASE數據庫的擴展存儲過程?
如何使用Sybase ASE數據庫的擴展存儲過程? 如何使用Sybase ASE數據庫的擴展存儲過程? 使用ASE已經有很長時間了,在使用過程中,不斷深入的了解了它的各種功能,但是對于擴展存儲過程基本上沒有書籍中有講到...查看完整版>>如何使用Sybase ASE數據庫的擴展存儲過程?
 
 
回到王朝網路移動版首頁