ASP 中通过OLEDB访问 Oracle 的代码  
系统环境: 
1、操作系统:Windows 2000
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:\ORACLE访问方法: 1、连入SQL*Plus
以system/manager用户登录,
SQL> conn system/manager创建新的用户:如user1/pass1,赋予connect,resource权限。
SQL> grant connect,resource to user1 identified by pass1;SQL> conn user1/pass1
SQL> create table test(a date);
Oracle数据库的实例名,本例:oradb
Oracle用户名,本例:user1
Oracle主机字符串:oradbtnsnames.ora文件中ORADB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.1.1.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradb)
    )
  )
2、在IIS默认WWW目录下创建test.asp,用notebook编辑,输入以下代码
<%
set conn=server.createobject("adodb.connection")
dns="Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=user1;Password=pass1;Data Source=oradb"
conn.Open dnsSQL="insert into test(a) values(sysdate)"
set rs=conn.execute(SQL)set rs=nothing
conn.close
set conn=nothing
%><%
set conn=server.createobject("adodb.connection")
dns="Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=user1;Password=pass1;Data Source=oradb"
conn.Open dnsSQL="select to_char(a,'hh24:mi:ss') from test"
set rs=conn.execute(SQL)do while (not rs.eof)
%>
<table border=1>
<tr><td><%=rs.fields(0).value%></font></td>
</tr>
<%
rs.movenext
looprs.close
set rs=nothing
conn.close
set conn=nothing
%>3、打开一个浏览器窗口,输入以下地址来查看运行结果,可以通过不断的按F5键来刷新显示结果
http://localhost/test.asp总结: 
利用以上代码,可以省去创建ODBC的麻烦,并提高效率。  

解决方案 »

  1.   

    参考文章asp通过ado连接oracle:
    <%
    dim cn,rs,driver_name
    driver_name="Provider=MSDAORA.1;Password=pass;User ID=user;Data Source=afis;Persist Security Info=True"
    set cn = server.CreateObject("adodb.connection")
    cn.open driver_name
    set rs=server.CreateObject("adodb.recordset")
    rs.open "select * from table",cn,3,1
    do while not rs.eof
       response.write rs("field")
       rs.movenext
    loop
    %>
    -----------------------------------------------------------------------------------------------------------------
    在ASP中调用动态ORACLE包\过程:1.所查视图表结构:
    名称                                      空?      类型
    ----------------------------------------- -------- ----------------------------
    ID                                                 NUMBER
    XK_SX                                              NUMBER
    XK_WSX_DJ                                          NUMBER
    XK_WSX_XJ                                          NUMBER
    XK_WSX_HJ                                          NUMBER
    F_ZS                                               NUMBER
    F_WZS_DJ                                           NUMBER
    F_WZS_XJ                                           NUMBER
    F_WZS_HJ                                           NUMBER
    SW_CS_DJ                                           NUMBER
    SW_CS_XJ                                           NUMBER
    SW_CS_HJ                                           NUMBER
    BZ                                                 CHAR(100)
    YY                                                 CHAR(4)
    XZQ                                                NUMBER
    WRR2                                               NUMBER
    WRR3                                               NUMBER
    WRR2NAME                                           CHAR(50)
    WRR3NAME                                           CHAR(50)
    ADDVNM                                             CHAR(9)2.在ORACLE中包的定义:CREATE OR REPLACE PACKAGE nb_supFind
    AS
     AS
     TYPE myrctype IS REF CURSOR; PROCEDURE RecSel(    p_StartDate IN CHAR,
        p_EndDate   IN CHAR,
        p_Region    IN VARCHAR2,   --分区内容
        p_flag      IN NUMBER,     --标识是行政区/二级区/三级区
        p_col       IN VARCHAR2,   --选中项目名
        p_table     IN VARCHAR2,   --操作表名
        v_ADDV      OUT myrctype   --作为输出的游标
        );
    END nb_supFind;CREATE OR REPLACE PROCEDURE NB_SURERFIND (
        --参数声明
        p_StartDate IN VIEW_NB_TYGL.YY%TYPE,
        p_EndDate   IN VIEW_NB_TYGL.YY%TYPE,
        p_Region    IN VARCHAR2,   --分区内容
        p_flag      IN NUMBER, --标识是行政区/二级区/三级区
        p_item      IN NUMBER,
        p_table     IN VARCHAR2,
        )AS PROCEDURE RecSel(
         p_StartDate IN CHAR,
        p_EndDate   IN CHAR,
        p_Region    IN VARCHAR2,   --分区内容
        p_flag      IN NUMBER,     --标识是行政区/二级区/三级区
        p_col       IN VARCHAR2,   --选中项目名
        p_table     IN VARCHAR2,   --操作表名
        v_ADDV      OUT myrctype   --作为输出的游标
        ) IS    strsql VARCHAR2(500);    BEGIN
          IF p_flag = 1 then
          if p_Region = 'NULL' then
              strsql:='SELECT ADDVNM,YY,SUM('||p_col||')
                   FROM '||p_table||
                   ' WHERE YY <= '||p_EndDate||' AND YY>='|| p_StartDate||'
                   GROUP BY ADDVNM,YY';
          else
              strsql:='SELECT ADDVNM,YY,SUM('||p_col||')
                     FROM '||p_table||
                   ' WHERE YY <= TO_NUMBER('||p_EndDate||') AND YY>=TO_NUMBER('|| p_StartDate||') AND  ADDVNM='''||p_Region||
                   ''' GROUP BY ADDVNM,YY';
          end if;
          DBMS_OUTPUT.PUT_LINE(strsql);
          --打开动态游标
          OPEN v_ADDV FOR strsql;
       END IF;
        END RecSel;
    END nb_supFind;3.在SQL PLUS中测试:
    set serveroutput on
    DECLARE
     p_rc NB_SUPFIND.myrctype;
     str varchar2(50);
    BEGIN
     NB_SUPFIND.RecSel('2000','2000','北京',1,'YSQ_SL','VIEW_NB_QSXK',p_rc);
     LOOP
       FETCH p_rc INTO str;
       DBMS_OUTPUT.PUT_LINE(str);
       EXIT WHEN p_rc%NOTFOUND;
     END LOOP;
    END;成功!4.在ASP里的调用
       Set Conn=Server.CreateObject("ADODB.Connection")
       Set Rs = Server.CreateObject("ADODB.Recordset")   '以下两句含在globo文件中
       connstr="Provider=MSDAORA;Password=water;User ID=water;Data Source=oradb_netserver"
       Session("connstr")=connstr   conn.Open Session("connstr")   Set CMD=Server.CreateObject("ADODB.Command")
       CMD.ActiveConnection = conn
       CMD.CommandType = adCmdText
       CMD.CommandTimeout = 0
       CMD.Prepared = true   CMD.CommandText = "{call nb_supFind.RecSel(?,?,?,?,?,?)}"  这里只写输入不写输出   CMD.Parameters.Append CMD.CreateParameter("p_StartDate",129,1,4,"2000")'开始年份
       CMD.Parameters.Append CMD.CreateParameter("p_EndDate",129,1,4,EndYr)    '结束年份
       CMD.Parameters.Append CMD.CreateParameter("p_Region",129,1,9,Addv)     '行政区名
       CMD.Parameters.Append CMD.CreateParameter("p_flag",3,1,4,1)            '标识分区
       CMD.Parameters.Append CMD.CreateParameter("p_col",200,1,50,Item)       '选中项目名
       CMD.Parameters.Append CMD.CreateParameter("p_table",200,1,100,Tname)     '得到表名   set rs.Source = CMD
       on error resume next
       set rs=CMD.Execute   if err.number <> 0 then
       response.Write err.Description
       response.End
       end if   rs.Open()
      

  2.   

    如果数据库服务的地址是: 192.168.0.8 ,IIS服务器的地址是:192.168.0.4(或192.168.0.120,总之,数据库服务器与IIS服务器不是同一部计算机),这种情况下应该怎么样来写呢?谢谢!