• VB6调用oracle存储过程的一个小问题


        10年前用VB6编写的程序,不停的修修改改,一直用到现在,而且将继续使用几年。

        本人最近接手了这个程序,除了“悲催”,实在想不出来其他词来形容本人的心情了。

        废话略过,最近碰到一个调用存储过程的问题,耗费了一些时间,最终解决了,把结果贴出来,如果还有人像本人一样在用VB6,希望能有所帮助。

        这个古老的程序,在调用oracle存储过程时,根据配置可使用不同的数据引擎,有2种可选
    Provider=OraOledb.Oracle.1
    Provider=MSDAORA.1

        调用存储过程的代码如下

            'cnDb.ConnectionString   =   "Provider=MSDAORA.1;… "
            cnDb.Open
            cmd.ActiveConnection   =   cnDb
            cmd.CommandType   =   adCmdStoredProc
            cmd.CommandText   =   "procName"

            cmd.Parameters("para1") =para1

            cmd.Parameters("para2") =para2

            cmd.Execute    'Provider=OraOledb.Oracle.1时,在这里报错

            paraOut = cmd("out")  ' 输出参数是string类型

        如果使用“Provider=OraOledb.Oracle.1”,调用存储过程时报错“提供程序不能导出参数信息,没有调用 SetParameterInfo”。

        如果使用“Provider=MSDAORA.1”,则调用存储过程正常。

        查阅了一些资料,修改为下面的代码,使用2种方式都可以正常调用

            'cnDb.ConnectionString   =   "Provider=MSDAORA.1;… "
            cnDb.Open
            cmd.ActiveConnection   =   cnDb
            cmd.CommandType   =   adCmdStoredProc
            cmd.CommandText   =   "procName"

            cmd.Parameters.Append cmd.CreateParameter( "para1", adLongVarChar, adParamInput, 1000, para1)

            cmd.Parameters.Append cmd.CreateParameter( "para2", adLongVarChar, adParamInput, 1000, para2)

            cmd.Execute    'Provider=OraOledb.Oracle.1时,不报错了

            paraOut = cmd("out")  ' 输出参数是string类型

        如果存储过程返回结果集,情况更复杂,参见这里:http://topic.csdn.net/t/20060323/15/4634977.html

  • 相关阅读:
    struts2重点——ValueStack和OGNL
    struts2基础——请求与响应、获取web资源
    struts2基础——最简单的一个例子
    servlet、filter、listener、interceptor之间的区别和联系
    服务器端组件
    自定义JSTL标签和函数库
    常见前端效果实现
    HTTP Cookie/Session
    获取动态SQL查询语句返回值(sp_executesql)
    WPF数据绑定
  • 原文地址:https://www.cnblogs.com/ols/p/2051995.html
Copyright © 2020-2023  润新知