| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vb >> 数据库 >> 文章正文
使用OLE DB和ADO调用返回记录集的Oracle存储过程            【字体:
使用OLE DB和ADO调用返回记录集的Oracle存储过程
作者:-    文章来源:-    点击数:    更新时间:2007-1-5

4      利用ADO调用返回记录集的Oracle存储过程
使用OLE DB和ADO调用返回记录集的Oracle存储过程,在定义ADO对象和设置参数时,需要特定的设置。

4.1 设定数据库连接字符串
在ADO应用程序中,如果要访问返回记录集的Oracle存储过程,需要使用OraOLE DB的数据库连接字符串的指定格式。在连接字符串中,PLSQLRSet属性表明OraOLE DB是否需要从PL/SQL存储过程返回记录集。如果需要返回记录集,PLSQLRSet设为1,否则设置为0,默认为 0。在Command命令执行后,该属性需要设置为0。
4.2 参数的设置
在ADO应用程序中,可以定义调用存储过程的参数。可使用Command对象的CreateParameter 方法创建Parameter 对象,并使用 Append 方法将它们添加到 Parameters 集合,在调用存储过程时,Parameters 集合将参数传递给存储过程。由于OraOLE DB采用定位传递参数的格式,即Command对象在调用存储过程时,调用参数的位置应和存储过程的参数的位置相对应。根据调用的存储过程的参数属性、名称和位置,在ADO中, Append 方法添加参数的次序应和存储过程中参数的顺序一致。
在OLE DB的标准中,没有REF CURSOR类型的预定义数据类型,因此在调用存储过程时,不能创建REF CURSOR类型的参数。在ADO调用返回记录集的存储过程时,OLE DB自动为存储过程中REF CURSOR类型的传出参数返回记录集,该记录集可以赋值给一个Recordset对象。如果PL/SQL存储过程有一个或多个REF CURSOR类型的传出参数,OLE DB将这些参数的记录集集成在一起,并通过第一个REF CURSOR类型的传出参数返回,这些记录集同样可以赋值给一个Recordset对象。
4.3 调用存储过程的格式
调用返回记录集存储过程之前,应将Command对象的 CommandType 属性指定SQL类型以优化查询性能,即CommandType 属性值设为AdCmdText。
使用 Command对象的CommandText 属性定义调用存储过程的命令。当使用Command对象执行Oracle返回记录集存储过程时,须以odbc转义符调用格式来调用存储过程,例如:{call credit_account(?,?)}。在这种格式中,传入和传出参数都用问号“?”来表示。
4.4返回记录集
可使用Command对象的 Execute 方法调用Oracle返回记录集的存储过程,并在适当的时候将结果记录集返回给 Recordset对象。该对象可以存储一个或多个结果记录集。当存储多个记录集时,可以用Recordset对象的NextRecordSet属性获得下一个记录集。
下面给出在ASP中调用返回存储过程或函数的示例程序:
<%@ Language=VBScript %>
<!--#include file="adovbs.inc"-->
<%
'Connection 对象代表了打开的、与数据源的连接。
set Con=server.CreateObject("ADODB.Connection")
set Rst1 =server.CreateObject("ADODB.Recordset")
set Rst2=server.CreateObject("ADODB.Recordset")
set Cmd =server.CreateObject("ADODB.Command")
set Prm1 =server.CreateObject("ADODB.Parameter")
set Prm2  =server.CreateObject("ADODB.Parameter")
Con.Provider = "OraOLEDB.Oracle"  '设置OLE DB提供者
'设置数据库连接字符串,test是数据库网络服务名
Con.ConnectionString = "Data Source=TEST;" & _
"User ID=scott;Password=tiger;PLSQLRSet=1"
'调用返回记录集的存储过程,PLSQLRSet指定为1
Con.Open
'创建Command对象到目标数据源的连接
Cmd.ActiveConnection = Con
cmd.CommandType=adcmdtext
'虽然Employees.GetEmpRecords()有四个参数,
'但只有需要设定两个参数
'因为REF CURSOR参数由OLE DB连接提供者自动设定。
Set Prm1 = Cmd.CreateParameter("Prm1", adSmallInt, adParamInput, , 30)  '创建一个输入参数,对应于indeptno
Cmd.Parameters.Append Prm1   '将参数添加到参数集合中
Set Prm2 = Cmd.CreateParameter("Prm2", adSmallInt, adParamOutput)    '创建一个输出参数,对应于p_errorcode
Cmd.Parameters.Append Prm2
'调用返回记录集的存储过程必须使用odbc的转义符调用格式。
Cmd.CommandText = "{CALL Employees.GetEmpRecords(?, ?)}"
'GetEmpRecords存储过程返回两个记录集,获得第一个记录集
Set Rst1 = Cmd.Execute  %>
<TABLE border = 1>
<%               
       Do while (Not rst1.eof) %>
           <tr>
           <% For Index=0 to (rst1.fields.count-1) %>
           <TD VAlign=top><% = rst1(Index)%></TD>
           <% Next %>
           </tr>           
         <% rst1.MoveNext
       Loop  '显示第一个记录集
      %>
</TABLE>
<%'获得GetEmpRecords存储过程返回的第二个记录集
Set Rst2 = Rst1.NextRecordset
'在此可加入显示第二个记录集的代码
Prm1.Value = 7369  '该参数对应于存储函数的inempno
Prm2.Value = 0     '该参数对应于存储函数的p_errorcode
'调用返回记录集的存储函数
Cmd.CommandText = "{CALL Employees.GetDept(?, ?)}"
'获得GetDept存储函数返回的记录集
Set Rst2 = Cmd.Execute  
Rst1.Close
Rst2.Close
set rst1=nothing
set rst2=nothing
con.close
set con=nothing
%>
<P> </P>
</BODY>
</HTML>
5      小结
在应用程序中,使用OLE DB和ADO访问返回记录集的存储过程,OLE DB服务者可以高效地将数据库端的多行记录集返回给ADO应用程序。在ADO应用程序中,使用Command对象可以传递输入或输出参数给存储过程,并调用存储过程以获得多行记录集。

上一页  [1] [2] [3] [4] [5] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 用VB编写DirectX7.0游戏(下…

  • 用VB编写DirectX7.0游戏(上…

  • 使用VB调用Oracle程序包内的…

  • VB中用ADO对象动态创建数据库…

  • fffff

  • 如何用MSComm Control传Bina…

  • MultiLink的WinSock Server程…

  • 用VB制作浏览器

  • 用VB编写网络寻呼机

  • 制作自己的网络搜索软件

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |