在VC++中调用存储过程

VC++ ADO开发实战:用_CommandPtr调用存储过程和参数化SQL查询的可运行工程 一套开箱即用的VC++ ADO数据库操作示例,聚焦_CommandPtr智能指针的实际应用。包含完整VS201x解决方案(.sln)、项目配置文件(.vcxproj及.filters)、主程序入口TestAdo.cpp、预编译头stdafx.h/.cpp、目标平台声明targetver.h,以及独立封装的ADO事件响应模块AdoEvent.h/.cpp。所有代码基于原生COM接口实现,不依赖MFC数据库类,支持存储过程调用(含输入/输出参数、返回值获取)和参数化SELECT/INSERT/UPDATE语句执 阅读详情

最近在忙活一个小项目,需要用C++语言,在VC环境下调用数据库中已经写好的存储过程,数据库用的是sql server 2000(很老了,呵呵,不过老板坚持也没有办法啊)。之前没有学过C++,在这个项目中也主要是负责数据库编程和维护。但是小boss一声令下,我不得不从,只好赶鸭子上架了。前几天一直没有进展,今天和西工大的同学一起,终于将这个VC下调用存储过程搞定。这段小程序主要是用来对txt文本数据进行入库。这样的话,可以节约大量的时间。之前也考虑过直接用sql server的数据导入功能,但是那样子的话还需要人工对txt文档做大量的标准化处理:如修改相应的字符,标点等待,比较繁琐。所以最终还是决定用代码进行入库。

    存储过程按照返回值分为有返回值和无返回值,下面我会对两种存储过程的调用分别说明。

数据库中已经有了以下两个存储过程:

1.InsertLine  //插入一条数据,且不用返回值

CREATE PROCEDURE InsertLine  

@oneValule varchar(50)  --定义要插入的参数

As begin tran

insert into myTable(字段名) --插入语句

values(@oneValule  )

commit GO

2. QueryLine  //查找一条数据,返回查到的记录数

CREATE Procedure QueryLine  

@key char(10), @flag int output --定义两个参数,第一个为查找的关键字,第二个为返回值(注意用output)

As begin tran

set @flag = (select count(*) from M_Navigation_Line where start_point = @startPoint and end_point = @endPoint) --查询并赋值

commit GO

 

接下来看源代码,先在源文件头部需要进入这样一个东东:(首先声明,我对C++不熟悉,我只能对代码做简单说明)

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 

然后,声明与调用存储过程相关的类(很别扭,不知如何表达)

  CoInitialize(NULL); //初始化COM环境

_ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象

_RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象

  try

{ /*打开数据库 */

pMyConnect-> Open( "DSN=databasename", "sa", "123",adModeUnknown); //连接ODBC数据源,打开管理工具进行配置,过程很简单,此处略去

 }

catch (_com_error &e)

{ AfxMessageBox(e.Description()); exit(0); } //输出异常信息

  //创建执行存储过程的命令对象

_CommandPtr m_pCommand;//智能指针

m_pCommand.CreateInstance("ADODB.Command");//实例

m_pCommand->ActiveConnection = pMyConnect;//设置连接

m_pCommand->CommandText = "

InsertLine
";//存储过程名称为InsertLine  

 

 

  _ParameterPtr oneValule ; //设置参数属性

oneValule.CreateInstance("ADODB.Parameter");

//下面有五个属性值可以设置 分别是名称,类型,参数类型,长度,和值,不明白的朋友可以去网上搜搜哈。

oneValule = m_pCommand->CreateParameter("oneValule ",adVarChar,adParamInput,10,(_variant_t)“传入的值”);//给参数设置各属性

m_pCommand->Parameters->Append(oneValule );//加入到Command对象的参数集属性中,添加参数,一定要按照自己存储过程中参数的顺序

m_pCommand->Execute(NULL,NULL,adCmdStoredProc);  //执行存储过程,该存储过程不带返回参数

oneValule ->Release(); 

pMyConnect->Close();
    CoUninitialize();

 

如果需要获得存储过程的返回值,如调用抵用第二个存储过程 

  其他步骤相同,把存储过程的名字改成QueryLine ,这时候有两个参数要配置,一个是输入参数,还有一个输出参数

  _ParameterPtr key; //航线终点

key.CreateInstance("ADODB.Parameter");

key= m_pCommand->CreateParameter("key",adVarChar,adParamInput,10,(_variant_t)“key值”);//给参数设置各属性

m_pCommand->Parameters->Append(ePoint);//加入到Command对象的参数集属性中

_ParameterPtr flag; //输出参数

flag.CreateInstance("ADODB.Parameter");

flag=m_pCommand->CreateParameter("flag",adInteger,adParamOutput,sizeof(long));

m_pCommand->Parameters->Append(flag);

m_pCommand->Execute(NULL,NULL,adCmdStoredProc);

int retValue = (long)m_pCommand-> Parameters-> GetItem("flag")-> GetValue(); //获取输出参数的值,赋值给retValue

pMyConnect->Close();

CoUninitialize();

 

VC++调用ADO运行带参数的存储过程 - [VC++6.0].rar VC++调用ADO运行带参数的存储过程 - [VC++6.0 立即下载

相关推荐

最简单的vc++调用存储过程实例(有参无参)归纳.pdf

最简单的vc++调用存储过程实例(有参无参)归纳.pdf

VC++对存储过程的访问

首先介绍一下存储过程:      存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。        平常对于一条SQL语句需要先编译然后再执行,然后才能返回用户所需要的结果,但

zqf_office的专栏 445

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 644

Command.CreateParameter参数说明

Command.CreateParameter (Name,[Type],[Direction],[Size],[Value]) Name 可选,字符串,代表 Parameter 对象名称。 Type 可选,长整型值,指定 Parameter 对象数据类型。关于有效设置请参见 Type 属性。 Direction 可选,长整型值,指定 Parameter 对象类型...

weixin_30648587的博客 468

别再混淆了!深入浅出图解四元数姿态控制中的‘误差四元数’(附四种定义对比与仿真)

本文深入解析四元数姿态控制中的误差四元数定义差异,对比四种常见定义(如Q₀∘Q⁻¹与Q⁻¹∘Q₀)及其对PD控制性能的影响。通过刚体动力学仿真验证,揭示定义二(Q⁻¹∘Q₀)在无人机和航天器控制中的最优性能,提供工程实践建议与参数整定技巧,帮助开发者避免常见陷阱并提升控制效率。

weixin_42528191的博客 279

RAG开源框架深度评测:从RAGFlow到Dify的实战选型指南

本文深度评测了主流RAG开源框架(RAGFlow、Dify、WeKnora)的核心能力与实战表现,提供企业级选型指南。重点对比了文档解析、检索性能和生产部署等关键指标,揭示RAGFlow在复杂文档处理、Dify在低代码开发、WeKnora在腾讯生态集成的差异化优势,并给出技术选型决策树与成本优化方案。

weixin_29294597的博客 828

ADO API 参考( ADO方法)之二

CreateParameter 方法使用指定属性创建新的 Parameter 对象。语法Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)返回值返回 Parameter 对象。参数Name   可选,字符串,代表 Parameter 对象名称。Type   可选,长

wybm的专栏 1732

SAP 配额修改 + 修改记录写入实现

采购配额修改并写入修改记录 cdhdr 和 cdpos

GAVIN 1101

vs2005下调用存储过程并用Datareader读出的方法

前些日一位兄弟问我vs2003下如何用sql2000的存储过程,并用DataReader读出苦于一时没有2003只好用2005写了一下,没想到改了一下还真是好使,而且进行了一下数据库的负载测试,效果还是不错的  Dim conn As New SqlConnection()        conn.ConnectionString = ConfigurationManager.Connec

重典的博客 2041

STM32F103四位数码管动态显示实战:从硬件连接到代码调试(附Proteus仿真)

本文详细介绍了STM32F103驱动四位数码管的动态显示技术,从硬件连接到代码调试的全过程。内容包括共阴/共阳数码管的区别、GPIO配置、动态显示原理及优化方法,并附有Proteus仿真验证。通过实战案例,帮助开发者快速掌握STM32数码管动态显示的核心技术。

weixin_29168393的博客 470

Unity 2021 LTS安装避坑指南:从下载到第一个3D项目的完整流程

本文提供了一份详尽的Unity 2021 LTS安装与首个3D项目创建指南。内容涵盖从Unity Hub下载、版本选择、模块安装避坑,到编辑器界面解析、创建旋转立方体脚本的完整流程,旨在帮助初学者快速搭建稳定开发环境并上手核心操作。

mango的博客 312

VC++调用带参数的存储过程

 VC++调用带参数的存储过程最近由于工作之需,要利用VC进行一些高级的数据库操作,如执行存储过程等。遍寻网络资源发现好使的不多(经常#30XX错误,大部分应该是COM的VARIANT数据类型所致,其实有个讨巧的方法,请看下文),在自己的实验下小有所得。记下学习笔记以备参考:1 进行ADO编程的必备步骤:引入msado15.dll #import "c:/program files/c

616

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1027

VC++ ADO调用存储过程方法

约定: 斜体字体表示可变部分   斜体 红色字体表示固定部分   红体   以下步骤的前提条件:COM ADO库已初始化,已经设置_ConnectionPtr连接对象。   步骤一: 创建 _CommandPtr 对象并初始化        _CommandPtr pCommand; pCommand.CreateInstance(__uu

拥抱变化 5720

MFC C++ 中开发 PLC 通信客户端

OPC UA | 工业标准化通信 | `open62541`(开源OPC UA库)或 `UA-.NET` 封装 | 跨平台、安全可靠,支持复杂数据类型 |- 连接句柄(`modbus_t*`/`UA_Client*`/`TS7Client*`)不可跨线程共享,需为每个线程创建独立连接。Modbus 是工业常用协议,分 **RTU**(串口)和 **TCP**(以太网)两种模式,以下以 Modbus TCP 为例。s=Tag`),复杂类型需解析扩展对象。

寒寒豆豆软件公司的博客 139

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VC++ ADO调用存储过程方法

VC++ ADO调用存储过程方法

深之JohnChen的专栏 3102

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vc mysql 存贮过程_在VC++中调用存储过程

最近在忙活一个小项目,需要用C++语言,在VC环境下调用数据库中已经写好的存储过程,数据库用的是sql server 2000(很老了,呵呵,不过老板坚持也没有办法啊)。之前没有学过C++,在这个项目中也主要是负责数据库编程和维护。但是小boss一声令下,我不得不从,只好赶鸭子上架了。前几天一直没有进展,今天和西工大的同学一起,终于将这个VC下调用存储过程搞定。这段小程序主要是用来对txt文本数据...

weixin_28921621的博客 216

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC++调用ADO运行带参数的存储过程 - [VC++6.0]

最近由于工作之需,要利用VC进行一些高级的数据库操作,如执行存储过程等。遍寻网络资源发现好使的不多(经常#30XX错误,大部分应该是COM的VARIANT数据类型所致,其实有个讨巧的方法,请看下文),在自己的实验下小有所得。记下学习笔记以备参考: 1 进行ADO编程的必备步骤:引入msado15.dll  #import "c:\program files\common files\syste

2733

VC++调用ADO运行带参数的存储过程

最近由于工作之需,要利用VC进行一些高级的数据库操作,如执行存储过程等。遍寻网络资源发现好使的不多(经常#30XX错误,大部分应该是COM的VARIANT数据类型所致,其实有个讨巧的方法,请看下文),在自己的实验下小有所得。记下学习笔记以备参考: 1 进行ADO编程的必备步骤:引入msado15.dll #import "c:\program files\common files\

ccx_john的专栏 903

VC调用存储过程的方法

1、如果用ODBC访问数据库的话,可参考下列代码: CDatabase * pDatabase = new CDatabase; TRY { pDatabase->OpenEx( _T("DSN=ODBCName;UID=***;PWD=***"), CDatabase::noOdbcDialog); } CATCH (CDBException, e) { delete pDatabase; re

snjdju的专栏 858

VC++执行MSSQL存储过程产生错误"对象关闭,无法操作该对象"

VC++执行MSSQL存储过程产生错误"对象关闭,无法操作该对象" 解决方法:关掉存储过程的记录回显,就可以解决该问题   就是在创建存储过程时在前面加入语句:set nocount on就ok. 

Arzhuo的专栏 1309

KeelKit 开始支持 VC++的 实体类生成 和 存储过程调用接口的生成

我们现在开始支持 VC++的 实体类生成 和 存储过程调用接口的生成!这将大大的方便了一些使用C++的朋友引用Keel.dll! 生成后的代码效果如下: #pragma once #using using namespace System::Security::Permissions; [assembly:SecurityPermissionAttribute(Secu

麦壳饼 508
上一篇: CListCtrl 改变列名
下一篇: 在Visual C++中用ADO进行数据库编程
CButtonST
博客等级 码龄16年 42粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值