如何通过使用 REF CURSORS ASP 的 Oracle 从检索 ADO 记录集

文章翻译 文章翻译
文章编号: 255043 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

与此版本的 Microsoft 数据访问组件 (MDAC) 2.5 Microsoft OLEDB 提供程序的 Oracle 现在支持从通过 REF CURSOR 类型使用的一个 Oracle 过程的 ActiveX 数据对象 (ADO) 记录集返回。对于 Oracle Microsoft OLEDB 提供程序中才支持此功能。Microsoft ODBC Oracle 驱动程序不支持 REF CURSORS 的使用。

更多信息

这一新功能通过以前的提供程序具有一些优点:
  • 在提供程序的早期版本中唯一的方法来从一个 Oracle 过程检索 ADO 记录集是声明 PL/SQL 表的记录集内所返回的每一列。使用新的提供程序只需声明一个 REF CURSOR,它然后处理返回的所有列。

    有关检索通过 PL/SQL 表的 Oracle 过程的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    229919如何从 ASP 上使用 ADO 的 Oracle 中检索记录集
  • 在以前版本的提供程序必须指定将返回记录集内的记录的最大数目。当您打开的基于 REF CURSOR ADO 记录集时,该步骤不再是必需的。使用新的提供程序可以只是指定的记录数为 0。例如:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}
    					
要在这篇文章中使用该示例,请执行以下操作:
  • 您应该具备与 Microsoft Visual Basic 脚本版 (VBScript)、 ActiveX 数据对象 (ADO) 和活动服务器页面 (ASP)。

  • 如果您创建 Oracle 软件包,您必须了解 Oracle 的程序的语言/结构化查询语言。

  • 若要使用 Oracle 数据库,必须正确配置您的 Internet 信息服务器 (IIS)。

    有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
    193225如何配置 IIS 以从 ASP 和 ADO 连接到 Oracle

示例代码

下面的代码示例演示如何从一个 REF CURSOR 通过一个 Oracle 过程检索 ADO 记录集,然后显示 ASP 页上的数据。您必须修改在 ASP 代码中用于连接到 Oracle 数据库 OLEDB 连接字符串。

  1. 在运行任何 ASP 代码之前在 Oracle 服务器上创建以下的 Oracle 软件包。此包使用 Oracle scott/对比色在架构中定义一些表。使用默认的 Oracle 安装安装 Oracle scott/对比色架构。如果不存在此架构,您必须运行下列的表脚本并插入到表的一些信息:

    表脚本
    CREATE TABLE DEPT
    (DEPTNO NUMBER(2,0) NOT NULL, 
    DNAME VARCHAR2(14) NULL, 
    LOC VARCHAR2(13) NULL,
    PRIMARY KEY (DEPTNO)
    );
    
    CREATE TABLE EMP
    (EMPNO NUMBER(4,0) NOT NULL, 
    ENAME VARCHAR2(10) NULL, 
    JOB VARCHAR2(9) NULL, 
    MGR NUMBER(4,0) NULL, 
    HIREDATE DATE NULL, 
    SAL NUMBER(7,2) NULL, 
    COMM NUMBER(7,2) NULL, 
    DEPTNO NUMBER(2,0) NULL,
    FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO),  
    PRIMARY KEY (EMPNO)
    );
    						

    包脚本
    CREATE OR REPLACE PACKAGE curspkg_join AS 
    	TYPE t_cursor IS REF CURSOR ; 
    	Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor); 
    END curspkg_join;
    / 
    
    CREATE OR REPLACE PACKAGE BODY curspkg_join AS
    Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor) 
    IS 
    	v_cursor t_cursor; 
    BEGIN 
    	IF n_EMPNO <> 0 
    	THEN
    		OPEN v_cursor FOR 
    		SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
    			FROM EMP, DEPT 
    			WHERE EMP.DEPTNO = DEPT.DEPTNO 
    			AND EMP.EMPNO = n_EMPNO;
    
    	ELSE 
    		OPEN v_cursor FOR 
    		SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
    			FROM EMP, DEPT 
    			WHERE EMP.DEPTNO = DEPT.DEPTNO;
    
    	END IF;
    	io_cursor := v_cursor; 
    END open_join_cursor1; 
    END curspkg_join;
    / 
    						
  2. 下面是 ASP 脚本,将调用前面的过程:
    <%@ Language=VBScript %>
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    </HEAD>
    <BODY>
    <P>
    <%
    	Const CONNECT = "Provider=MSDAORA.1;Data Source=your_tns_alias_name;User ID=scott;Password=tiger"
    		
    	Dim cn, rs, cmd, param
    	Dim SQL
    
    	set cn = Server.CreateObject( "ADODB.Connection" )
    	cn.Open CONNECT	
    
    	SQL = "{call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}"
    	set cmd = server.CreateObject ("ADODB.Command")
    	with cmd
    		set .ActiveConnection	= cn
    	    .CommandText			= SQL
    	    .CommandType			= 1		'adCmdText
    	    'Pass in 0 to retrieve all of the records
    	    set param = .CreateParameter("id", 131 , 1 , , 0)  '<<131=adNumeric, 1=adParamInput
    	    .Parameters.Append param
    	end with
    					
    	set rs = server.CreateObject ( "ADODB.Recordset" ) 
    	set rs = cmd.execute
    		    
    	%>
    	<TABLE WIDTH="80%" ALIGN=center BORDER=1 CELLSPACING=3 CELLPADDING=3>
    	<%
    	Response.Write ("<TR bgcolor=Gray>")
    	For i = 0 To rs.Fields.Count - 1
    		Response.Write ("<TD>" & rs.Fields(i).Name & "</TD>")
    	Next
    	Response.Write ("</TR>")
    	Do until rs.EOF
    		response.write ("<TR>")
    		for i = 0 to rs.Fields.Count - 1
    			If IsNull(rs(i).value) then 
    				Response.Write ("<TD> NULL </TD>")
    			else 
    				Response.Write ("<TD>" & rs(i).value & "</TD>")
    			end if 
    		next 
    		rs.MoveNext
    		response.write ("</TR>")
    	loop
    	%>
    	</TABLE>
    	<%
    	Set cmd = Nothing
    	Set param = Nothing
    	rs.close
    	Set rs = Nothing
    	cn.close
    	Set cn = Nothing
    %>
    </P>
    </BODY>
    </HTML>
    						

参考

MDAC 有关的详细信息,请参阅以下网站:
http://msdn2.microsoft.com/en-us/data/aa937695.aspx
Oracle8 企业版文档

属性

文章编号: 255043 - 最后修改: 2007年5月17日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft OLE DB Provider for Oracle Server 1.0
关键字:?
kbmt kbhowto kboracle KB255043 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 255043
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com