国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:32:23
字體:
來源:轉載
供稿:網友

  一、關于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存儲過程。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳泉市| 察隅县| 彰化市| 洛扎县| 大厂| 蓝山县| 衡阳县| 大荔县| 视频| 曲松县| 永兴县| 武乡县| 永福县| 全椒县| 资讯 | 崇左市| 包头市| 荔波县| 香港| 牟定县| 博兴县| 新巴尔虎左旗| 波密县| 西昌市| 靖远县| 射阳县| 阿拉善盟| 若羌县| 襄垣县| 石楼县| 会东县| 阳曲县| 东乌珠穆沁旗| 邮箱| 仁寿县| 敦煌市| 台中市| 东乌| 正蓝旗| 南木林县| 鹰潭市|