【Oracle】VC6.0使用 odbc 访问 Oracle 存储过程
环境说明
系统环境
- 系统:Windows XP
- IDE: Microsoft Visual C++ 6.0
使用的对象 msado15.tlh
-
_ConnectionPtr
m_pConnection;HRESULT hr = m_pConnection.CreateInstance(“ADODB.Connection”);
-
_RecordsetPtr
m_pRecordset;m_pRecordset.CreateInstance(“ADODB.Recordset”);
-
_CommandPtr
m_pCommand;m_pCommand.CreateInstance(“ADODB.Command”);
-
_ParameterPtr
pInputParam;pInputParam.CreateInstance(__uuidof(Parameter));
Oracle 存储过程
Procedures
PRO_DISPENSER_DISPENSING {
I_CHFM VARCHAR2,
ERR_NO NUMBER OUT,
ERR_MSG VARCHAR2 OUT}
VC6.0 完整代码
注意事项:以下代码可以会出现第一次调用成功,第二次调用失败的情况,建议每次调用都关闭链接,再重新打开链接再调用存储过程。
CADOManage* adb = new CADOManage();LONG errorCode = adb->open();if (errorCode !=0){continue;}// 调用存储过程errorCode = adb->execSQL2('入参1');if (errorCode !=0){adb->freeRecord();adb->close();continue;}adb->freeRecord();adb->close();
long CADOManage::open()
{//return open(param);string connectMode = configUtil.getValue(cfghis_unMysql_DBConnectMode);try{rootLogger->trace("function open start..............");CoInitialize(0);HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象if(SUCCEEDED(hr)){//dbType = "MYSQL";_bstr_t connStr;m_pConnection->CursorLocation=adUseClient;for(int i=0;i< DBCMORA_NUM;i++){if (egOracleCoonectUI[i] == connectMode){string strConnect;CString cstrConnect;cstrConnect =stringToCString(egOracleCoonect[i]) ;cstrConnect.Replace("myHost",stringToCString(ADODBparam.m_server));cstrConnect.Replace("myUser",stringToCString(ADODBparam.m_uid));cstrConnect.Replace("myPassword",stringToCString(ADODBparam.m_pwd));cstrConnect.Replace("myDSName",stringToCString(ADODBparam.m_data));if(ADODBparam.m_port == "")ADODBparam.m_port = 1433;cstrConnect.Replace("myPort",stringToCString(ADODBparam.m_port));strConnect = CStringTostring(cstrConnect);if (i== DBCMORA_ODBC1 || i==DBCMORA_OLEDBMS13 || i==DBCMORA_OLEDBOracle1){m_pConnection->Open(_bstr_t(strConnect.c_str()),(_bstr_t)ADODBparam.m_uid.c_str(),(_bstr_t)ADODBparam.m_pwd.c_str(),adConnectUnspecified);}else if (i== DBCMORA_ODBC3){m_pConnection->Open(_bstr_t(strConnect.c_str()),(_bstr_t)_T(""),(_bstr_t)_T(""),adModeUnknown);}else{m_pConnection->Open(_bstr_t(strConnect.c_str()),(_bstr_t)_T(""),(_bstr_t)_T(""),adConnectUnspecified);}break;}} bOpen= true;m_pRecordset.CreateInstance("ADODB.Recordset");m_pCommand.CreateInstance("ADODB.Command");m_pCommand->ActiveConnection = m_pConnection;}}catch(_com_error e)///捕捉异常{string errormessage;errormessage = "连接ADO数据库失败!\r错误信息:";errormessage +=e.ErrorMessage();rootLogger->fatal(errormessage);// AfxMessageBox(errormessage.c_str());///显示错误信息//bOpen= false;return ER_DB_CONNECT;}rootLogger->trace("function open end..............");return 0;
}
long CADOManage::execSQL2(const string &sqlText)
{try{ rootLogger->trace("function execSQL start..............");mute->Lock();int nRet = 0;if (sqlText == ""){rootLogger->warn("no SQL text!..............");mute->Unlock();return WM_NO_SQLTEXT;}freeRecord();rootLogger->debug("sqlText = " + sqlText);//设置命令类型m_pCommand->CommandType = adCmdStoredProc;//设置存储过程名称m_pCommand->CommandText =_bstr_t("portal56_his.pro_dispenser_dispensing");m_pCommand->put_CommandTimeout(60);_ParameterPtr pInputParam,pOutputParam1,pOutputParam2;pInputParam.CreateInstance(__uuidof(Parameter));pOutputParam1.CreateInstance(__uuidof(Parameter));pOutputParam2.CreateInstance(__uuidof(Parameter));//设置入参 i_cfhm 名称、数据类型、输入/输出、长度、内容pInputParam = m_pCommand->CreateParameter(_bstr_t("i_cfhm"), adVarChar, adParamInput, sqlText.length(), sqlText.c_str());pInputParam->Value = _variant_t(sqlText.c_str());//设置出参1 err_no 名称、数据类型、输入/输出、长度pOutputParam1 = m_pCommand->CreateParameter(_bstr_t("err_no"), adInteger, adParamOutput,10);//设置出参2 err_msg 名称、数据类型、输入/输出、长度pOutputParam2 = m_pCommand->CreateParameter(_bstr_t("err_msg"), adVarChar, adParamOutput, 1024);pOutputParam2->Size = 1024;//添加入参1 到 命令m_pCommand->Parameters->Append(pInputParam);//添加入出参1 到 命令m_pCommand->Parameters->Append(pOutputParam1);//添加入出参2 到 命令m_pCommand->Parameters->Append(pOutputParam2);//以存储过程的形式adCmdStoredProc 执行命令m_pRecordset = m_pCommand->Execute(NULL, NULL,adCmdStoredProc); m_pCommand->Parameters->Release();pInputParam->Release();pOutputParam1->Release();pOutputParam2->Release();mute->Unlock();rootLogger->trace("function execSQL end..............");}catch (_com_error e) {string errormessage = e.ErrorMessage(); rootLogger->error("failed to execute SQL:" + errormessage);rootLogger->error("failed sql = " + sqlText);mute->Unlock();return ER_EXECUTE_SQL;}return 0;
}
相关文章:
【Oracle】VC6.0使用 odbc 访问 Oracle 存储过程
环境说明 系统环境 系统:Windows XP IDE: Microsoft Visual C 6.0 使用的对象 msado15.tlh _ConnectionPtr m_pConnection; HRESULT hr m_pConnection.CreateInstance(“ADODB.Connection”); _RecordsetPtr m_pRecordset; m_pRecordset.CreateInstan…...

QWidget快速美化-圆形蓝色单选框
将代码复制进QRadioButton的样式表 效果: 代码: QRadioButton{font:75 9pt "Arial";background:transparent;color:white;border:none; }QRadioButton:disabled{color:gray; }QRadioButton::indicator{width:12px;height:12px;border-radius:8px; }QRadioButton::i…...
adb 获取当前界面元素
adb配置正确,直接看6,pull的位置是你执行pull的目录下。 --------------------------------------------------------------------------------------------------------------------------------- 使用adb命令获取当前应用的元素需要先连接到手机或模…...
SpringSecurity源码学习四:会话管理
目录 1. 什么是会话管理2. springSecurity中的session管理怎么做的3. springSecurity源码中的session管理4. 代码示例5. 源码5.1 不同策略的含义 6. 集群模式session管理7. 总结 1. 什么是会话管理 会话管理是指在Java应用程序中管理用户会话状态的过程。在Spring框架中&#…...
Kotlin笔记(七):协程
1. 协程的定义 协程属于Kotlin中非常有特色的一项技术,因为大部分编程语言中是没有协程这个概念的。 什么是协程呢?它其实和线程是有点类似的,可以简单地将它理解成一种轻量级的线程。要知道,线程是非常重量级的,它需要…...

存储优化知识复习二详细版解析
存储优化 知识复习二 一、 选择题 1、 对数据库调优的方法中,最困难但是最有成效的是( )。 A、优化表的架构设计 B、添加内存 C、索引优化 D、查询语句优化 【参考答案】A2、 防止与处理死锁的方法有( )。 A、尽量避免或尽快处理阻塞 B、访…...

《持续交付:发布可靠软件的系统方法》- 读书笔记(七)
持续交付:发布可靠软件的系统方法(七) 第 7 章 提交阶段7.1 引言7.2 提交阶段的原则和实践7.2.1 提供快速有用的反馈7.2.2 何时令提交阶段失败7.2.3 精心对待提交阶段7.2.4 让开发人员也拥有所有权7.2.5 在超大项目团队中指定一个构建负责人 …...
Go源码实现使用多线程并发下载大文件的功能
摘要:Go语言编码实现了使用多线程并发下载文件的功能。 1. 代码流程介绍 1. 获取系统的CPU核心数量,并将其作为线程数的参考值,并打印出来。 2. 定义要下载的文件的URL、线程数和输出文件名。 3. 使用getFileSize()函数获取文件大小…...

Python基础入门例程1-NP1 Hello World!
描述 将字符串 Hello World! 存储到变量str中,再使用print语句将其打印出来。 输入描述: 无 输出描述: 一行输出字符串Hello World! 解答: str "Hello World!" print(str) 解释说明: 赋值变量&…...
前端面试题10.23
解决的最复杂的前端问题,介绍一下 最复杂的前端问题之一是浏览器兼容性,不同浏览器对网页的渲染方式存在差异,需要针对不同浏览器做兼容性处理。此外,前端性能优化也是一个复杂的问题,需要综合考虑网页加载速度、渲染…...

DYC算法开发与测试(基于ModelBase实现)
ModelBase是经纬恒润开发的车辆仿真软件,包含两个大版本:动力学版本、智能驾驶版本。动力学版包含高精度动力学模型,能很好地复现车辆在实际道路中运行的各种状态变化,可用于乘用车、商用车动力底盘系统算法开发、控制器仿真测试&…...

第四章 路由基础
目录 4.1 路由器概述 4.1.1 路由器定义 4.1.2 路由器工作原理 4.1.3 路由表的生成方式 (1)直连路由 (2)静态路由 (3)动态路由 4.1.4 路由器的接口 (1)配置接口 ࿰…...

Java逻辑运算符(、||和!),Java关系运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是 true 或 false。 逻辑运算符是对布尔型变量进行运算,其结果也是布尔型,具体如表 1 所示。 表 1 逻辑运算符的用…...

三个设备文件
...

Java赋值运算符(=)
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。 其语法格式如下所示: 变量名称表达式内容 在 Java 语言中,“变量名称”和“表达式…...

提升药店效率:山海鲸医药零售大屏的成功案例
在医药行业中,特别是医药零售领域,高效的药品管理和客户服务至关重要。随着科技的飞速发展,数字化解决方案已经成为提高医药零售管控效率的有效工具之一。其中,医药零售管控大屏作为一种强大的工具,正在以独特的方式改…...
使用Fragement(碎片)
一、Fragment简介 屏幕大小的差距可能会使同样的界面在不同设备上显示出不同的效果,为了能同时兼顾到手机和平板电脑的开发,从Android3.0版本开始提供了Fragment。 Fragment(碎片)是一种嵌入在Activity中的UI片段,它…...
种花问题(Python题目)
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 …...

STM32入门F4
学习资料:杨桃电子,官网:洋桃电子 | 杜洋工作室 www.doyoung.net 嵌入式开发核心宗旨:以最适合的性能、功能、成本来完成最有性价比的产品开发。 1.为什么要学F407 STM32F103系列与STM32F407系列对照表: 2.F4系列命…...

【30】c++设计模式——>状态模式
状态模式概述 状态模式是一种行为型设计模式,它可以让一个对象在其内部状态发生变化时更改其行为。通过将每个状态封装成一个独立的类,我们可以使状态之间互相独立,并且使得状态的切换变得更加灵活、可扩展。(多个状态之间可以相…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...