Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Trình duyệt của bạn không được hỗ trợ

Bạn cần cập nhật trình duyệt của mình để sử dụng trang web.

Cập nhật lên Internet Explorer phiên bản mới nhất.

Làm thế nào để lấy lại ADO Recordset từ Oracle qua ASP sử dụng REF CURSORS

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:255043
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài viết này nói về các sản phẩm mà Microsoft không còn hỗ trợ nữa. Do đó, bài viết này được cung cấp "nguyên bản" và sẽ không được cập nhật.
TÓM TẮT
Với việc phát hành của Microsoft dữ liệu truy cập các thành phần (MDAC) 2.5, nhà cung cấp của Microsoft OLEDB cho Oracle bây giờ hỗ trợ sự trở lại của ActiveX Data Objects (ADO) recordsets từ một thủ tục Oracle thông qua việc sử dụng các kiểu con TRỎ REF. Chức năng này chỉ được hỗ trợ trong các nhà cung cấp của Microsoft OLEDB cho Oracle. ODBC Microsoft cho Oracle trình điều khiển không hỗ trợ việc sử dụng các REF CURSORS.
THÔNG TIN THÊM
Chức năng mới này có một số lợi ích trên các nhà cung cấp trước đó:
  • Trong phiên bản trước của các nhà cung cấp cách duy nhất để lấy một recordset ADO từ một thủ tục Oracle đã tuyên bố một PL/SQL bảng cho mỗi cột đó được trở lại vào recordset. Với nhà cung cấp mới, bạn chỉ cần phải khai báo một con trỏ chuột REF, mà sau đó xử lý sự trở lại của tất cả các cột.

    Để thêm thông tin về cách truy xuất Oracle thủ tục thông qua bảng PL/SQL, bấm vào số bài viết dưới đây để xem bài viết trong cơ sở kiến thức Microsoft:
    229919 Làm thế nào để lấy một Recordset từ Oracle sử dụng ADO trên ASP
  • Trong phiên bản trước của các nhà cung cấp bạn phải chỉ định số lượng tối đa của hồ sơ sẽ trở lại trong recordset. Khi bạn mở một recordset ADO dựa trên một con TRỎ REF, mà bước không còn cần thiết. Với các nhà cung cấp mới, bạn chỉ có thể chỉ định 0 cho số lượng hồ sơ. Ví dụ:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}					
Sử dụng mẫu trong bài viết này:
  • Bạn nên được thành thạo với Microsoft Visual Basic script Edition (VBScript), ActiveX Data Objects (ADO) và Active Server Pages (ASP).

  • Nếu bạn sẽ tạo gói Oracle, bạn phải hiểu của Oracle thủ tục ngữ/cấu trúc Query Language.

  • Của bạn Internet Information Server (IIS) phải được cấu hình đúng để làm việc với cơ sở dữ liệu Oracle.

    Để biết thêm chi tiết, bấm vào số bài viết dưới đây để xem bài viết trong cơ sở kiến thức Microsoft:
    193225 Làm thế nào để cấu hình IIS để kết nối với Oracle từ ASP và ADO

Mẫu mã

Mẫu mã sau đây chứng tỏ làm thế nào để lấy một recordset ADO từ một thủ tục Oracle thông qua một con TRỎ REF, và sau đó sẽ hiển thị các dữ liệu trên một trang ASP. Bạn phải sửa đổi các chuỗi kết nối OLEDB được sử dụng trong mã ASP để kết nối với cơ sở dữ liệu Oracle.

  1. Tạo ra các gói phần mềm Oracle sau đây trên hệ phục vụ Oracle trước khi bạn chạy bất kỳ mã ASP. Gói này sử dụng một số bảng được định nghĩa trong giản đồ Oracle Scott/Tiger. Giản đồ Oracle Scott/Tiger được cài đặt với cài đặt Oracle mặc định. Giản đồ này không tồn tại, bạn phải chạy các script bảng sau đây và đưa một số thông tin vào các bảng:

    Bảng script
    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));						

    Gói script
    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 ASProcedure 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. Sau đây là kịch bản ASP mà các cuộc gọi thủ tục trước:
    <%@ 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>						
THAM KHẢO
Để biết thêm chi tiết về MDAC, xin vui lòng xem trang Web sau đây:Tài liệu Oracle8 Enterprise Edition
REF_CURSOR

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 255043 - Xem lại Lần cuối: 08/21/2011 10:18:00 - Bản sửa đổi: 2.0

  • kbhowto kboracle kbmt KB255043 KbMtvi
Phản hồi