广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++通过ADO对数据库操作
  • 232
分享到

c++通过ADO对数据库操作

2024-04-02 19:04:59 232人浏览 薄情痞子
摘要

C/C++ 通过ADO对数据库操作实例:c++ 通过ADO调用存储过程写入数据到SQL Server1.在.h头文件导入微软提供的ado的动态库#pragma warning(disable:4146)#i


C/C++ 通过ADO对数据库操作

实例:c++ 通过ADO调用存储过程写入数据到SQL Server


1.在.h头文件导入微软提供的ado的动态库

#pragma warning(disable:4146)

#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")

#pragma warning(default:4146)

using namespace ADODB;


2.编写函数调用存储过程

//保存数据库记录

void SaveDbTran(char *devID,char * traceNo,char *refNo,char *batchNo, char * bankCardNo, char * tranDate, char * tranTime,char * amt,char * hosCardNo,char * hosName,char * hosIDCardNo, char *msg)

{


    //2.1创建数据库连接句柄

    _ConnectionPtr pMyConnect; 

HRESULT hr;

    

   

    try                 

    {    

   //2.1.1组建连接数据库字符串

char *dbConStr = new char[400];

strcpy(dbConStr,"Provider=sqlOLEDB;Server=sqlserver服务器地址,1433;Database=数据库名;uid=登陆用户;pwd=登录密码");

CoInitialize(NULL);

     

   Sleep(300);

//2.1.2 句柄实例化 实现连接

hr = pMyConnect.CreateInstance("ADODB.Connection");

if(SUCCEEDED(hr))

{

ct.SaveLog("创建数据库连接对象成功,等待打开连接",0,dbConStr);

pMyConnect->Open(_bstr_t(dbConStr),"","",adModeUnknown); 

}

   else

{

CoUninitialize();

return;

}  

    }

    catch(_com_error &err)

    {

   

CoUninitialize();

return ;

    } 

   //2.2组建运行命令参数句柄

    _CommandPtr   m_pCommand;

_RecordsetPtr m_pRecordset; 

try

{

   //2.2.1 句柄实例化

m_pCommand.CreateInstance(__uuidof(Command));//Command无需改变

m_pCommand->ActiveConnection = pMyConnect;//pMyConnect 为连接数据库句柄

m_pCommand->CommandType = adCmdStoredProc;//adCmdStoredProc无需改变

m_pCommand->CommandText = _bstr_t("p_d_tra");//p_d_tra为存储过程名


       

//2.2.2 设置给可变参数赋值

_variant_t  vv_dotype,vv_TranNo,vv_devID,vv_TranDate,vv_TranTime;

        _variant_t  vv_RetCode,vv_BusType,vv_CardNo,vv_IDCard,vv_Name;

   _variant_t  vv_Amt,vv_Notes,vv_SerID,vv_DesCont,vv_tranFlag;

        _variant_t  vv_bankCardNo,vv_bankGroupNo,vv_bankFlowNo,vv_DevName,vv_ExeCount;

         // value to variant

        vv_dotype     =_variant_t(_bstr_t("1"));

        vv_TranNo     =_variant_t(_bstr_t(temp_traceNo));

vv_devID      =_variant_t(_bstr_t(devID));

vv_TranDate   =_variant_t(_bstr_t(datetime));

vv_TranTime   =_variant_t(_bstr_t(datetime));

vv_RetCode    =_variant_t(_bstr_t(""));

vv_BusType    =_variant_t(_bstr_t("14"));

vv_CardNo     =_variant_t(_bstr_t(hosCardNo));

vv_IDCard     =_variant_t(_bstr_t(hosIDCardNo));


vv_Name       =     _variant_t(_bstr_t(hosName));

vv_Amt        =_variant_t(_bstr_t(amt));

   vv_Notes      =_variant_t(_bstr_t("交易成功"));

vv_SerID  =_variant_t(_bstr_t(""));

        vv_DesCont    =_variant_t(_bstr_t(""));

vv_tranFlag   =_variant_t(_bstr_t("0"));

vv_bankCardNo =_variant_t(_bstr_t(temp_bankCardNo));

vv_bankGroupNo=_variant_t(_bstr_t(batchNo));

vv_bankFlowNo =_variant_t(_bstr_t(refNo));

        vv_DevName    =_variant_t(_bstr_t(""));

        vv_ExeCount   =     _variant_t(ret_ExeCount);

        

//2.2.3创建数据库存储过程输入参数

_ParameterPtr mp_dotype,mp_TranNo,mp_devID,mp_TranDate,mp_TranTime;

        _ParameterPtr mp_RetCode,mp_BusType,mp_CardNo,mp_IDCard,mp_Name;

   _ParameterPtr mp_Amt,mp_Notes,mp_SerID,mp_DesCont,mp_tranFlag;

    _ParameterPtr mp_bankCardNo,mp_bankGroupNo,mp_bankFlowNo,mp_DevName,mp_ExeCount;


//2.2.3.1给数据库参数实例化

        //create ParameterPtr instance

mp_dotype.CreateInstance(__uuidof(Parameter));

mp_TranNo.CreateInstance(__uuidof(Parameter));

mp_devID.CreateInstance(__uuidof(Parameter));

mp_TranDate.CreateInstance(__uuidof(Parameter));

mp_TranTime.CreateInstance(__uuidof(Parameter));

mp_RetCode.CreateInstance(__uuidof(Parameter));

mp_BusType.CreateInstance(__uuidof(Parameter));

mp_CardNo.CreateInstance(__uuidof(Parameter));

mp_IDCard.CreateInstance(__uuidof(Parameter));

mp_Name.CreateInstance(__uuidof(Parameter));

mp_Amt.CreateInstance(__uuidof(Parameter));

mp_Notes.CreateInstance(__uuidof(Parameter));

mp_SerID.CreateInstance(__uuidof(Parameter));

mp_DesCont.CreateInstance(__uuidof(Parameter));

mp_tranFlag.CreateInstance(__uuidof(Parameter));

mp_bankCardNo.CreateInstance(__uuidof(Parameter));

mp_bankGroupNo.CreateInstance(__uuidof(Parameter));

mp_bankFlowNo.CreateInstance(__uuidof(Parameter));

mp_DevName.CreateInstance(__uuidof(Parameter));

        mp_ExeCount.CreateInstance(__uuidof(Parameter));

         

        //2.2.3.2将数据库参数追加到 命令变量句柄的参数属性末尾

//append parameterPtr set  to _CommandPtr parameters lists 

//数据库参数 =  命令变量句柄->创建参数方法(_bstr_t("存储过程参数名"),存储过程参数数据类型,存储过程参数输入输出类型,默认大小,可变参数值)

        mp_dotype=m_pCommand->CreateParameter(_bstr_t("dotype"),adInteger,adParamInput,-1,vv_dotype);//整数类型

        m_pCommand->Parameters->Append(mp_dotype); 


mp_TranNo=m_pCommand->CreateParameter(_bstr_t("TranNo"),adVarChar,adParamInput,32,vv_TranNo); //字符串类型

        m_pCommand->Parameters->Append(mp_TranNo); 


mp_devID=m_pCommand->CreateParameter(_bstr_t("devID"),adVarChar,adParamInput,20,vv_devID);

        m_pCommand->Parameters->Append(mp_devID); 


        mp_TranDate=m_pCommand->CreateParameter(_bstr_t("TranDate"),adVarChar,adParamInput,25,vv_TranDate);//时间类型

        m_pCommand->Parameters->Append(mp_TranDate); 


mp_TranTime=m_pCommand->CreateParameter(_bstr_t("TranTime"),adVarChar,adParamInput,25,vv_TranTime);

        m_pCommand->Parameters->Append(mp_TranTime); 


mp_RetCode=m_pCommand->CreateParameter(_bstr_t("RetCode"),adVarChar,adParamInput,20,vv_RetCode);

        m_pCommand->Parameters->Append(mp_RetCode); 


        mp_BusType=m_pCommand->CreateParameter(_bstr_t("BusType"),adInteger,adParamInput,-1,vv_BusType);

        m_pCommand->Parameters->Append(mp_BusType); 


mp_CardNo=m_pCommand->CreateParameter(_bstr_t("CardNo"),adVarChar,adParamInput,20,vv_CardNo);

        m_pCommand->Parameters->Append(mp_CardNo); 


mp_IDCard=m_pCommand->CreateParameter(_bstr_t("IDCard"),adVarChar,adParamInput,20,vv_IDCard);

        m_pCommand->Parameters->Append(mp_IDCard); 

        mp_Name=m_pCommand->CreateParameter(_bstr_t("Name"),adVarChar,adParamInput,10,vv_Name);

        m_pCommand->Parameters->Append(mp_Name); 


mp_Amt=m_pCommand->CreateParameter(_bstr_t("Amt"),adDecimal,adParamInput,10,vv_Amt);//浮点数类型

mp_Amt->NumericScale = 2;  //设置小数点后位数

mp_Amt->Precision = 10;    //设置整数位位数

        m_pCommand->Parameters->Append(mp_Amt); 


mp_Notes=m_pCommand->CreateParameter(_bstr_t("Notes"),adVarChar,adParamInput,2000,vv_Notes);

        m_pCommand->Parameters->Append(mp_Notes); 


        mp_SerID=m_pCommand->CreateParameter(_bstr_t("SerID"),adVarChar,adParamInput,20,vv_SerID);

        m_pCommand->Parameters->Append(mp_SerID); 


mp_DesCont=m_pCommand->CreateParameter(_bstr_t("DesCont"),adVarChar,adParamInput,2000,vv_DesCont);

        m_pCommand->Parameters->Append(mp_DesCont); 


mp_tranFlag=m_pCommand->CreateParameter(_bstr_t("tranFlag"),adInteger,adParamInput,-1,vv_tranFlag);

        m_pCommand->Parameters->Append(mp_tranFlag); 

        

mp_bankCardNo=m_pCommand->CreateParameter(_bstr_t("bankCardNo"),adVarChar,adParamInput,25,vv_bankCardNo);

        m_pCommand->Parameters->Append(mp_bankCardNo); 


mp_bankGroupNo=m_pCommand->CreateParameter(_bstr_t("bankGroupNo"),adVarChar,adParamInput,12,vv_bankGroupNo);

        m_pCommand->Parameters->Append(mp_bankGroupNo); 


mp_bankFlowNo=m_pCommand->CreateParameter(_bstr_t("bankFlowNo"),adVarChar,adParamInput,12,vv_bankFlowNo);

        m_pCommand->Parameters->Append(mp_bankFlowNo); 

mp_DevName=m_pCommand->CreateParameter(_bstr_t("DevName"),adVarChar,adParamInput,40,vv_DevName);

        m_pCommand->Parameters->Append(mp_DevName); 


mp_ExeCount=m_pCommand->CreateParameter(_bstr_t("ExeCount"),adInteger,adParamOutput,-1,vv_ExeCount);//输出类型

        m_pCommand->Parameters->Append(mp_ExeCount); 

//2.2.4 执行得到结果

    _variant_t vNull;

vNull.vt = VT_ERROR;

vNull.scode = DISP_E_PARAMNOTFOUND;

//2.2.4.1执行数据库存储过程

m_pRecordset = m_pCommand->Execute(&vNull,&vNull,adCmdStoredProc);//adCmdStoredProc不要改变  

//m_pRecordset执行SQL结果 可对其进行判断确定成功,错误原因

      

    

if (mp_ExeCount->Value != 0) 

{

ct.SaveLog("插入数据失败",0,"");

}

else

{

            ct.SaveLog("插入数据成功",0,"");

}

}

catch(_com_error &err)

{

if(pMyConnect->State) pMyConnect->Close();

pMyConnect = NULL; 

CoUninitialize();


}


//2.2.5 关闭连接 释放资源

if(pMyConnect->State) pMyConnect->Close();

pMyConnect = NULL; 

CoUninitialize();  //切记成功与否都要调用 以释放资源


return ;


}


--结束END--

本文标题: c++通过ADO对数据库操作

本文链接: https://www.lsjlt.com/news/41946.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++通过ADO对数据库操作
    C/C++ 通过ADO对数据库操作实例:c++ 通过ADO调用存储过程写入数据到sql server1.在.h头文件导入微软提供的ado的动态库#pragma warning(disable:4146)#i...
    99+
    2022-10-18
  • c++通过ADO连接数据库
    c++通过ADO连接数据库,具体要求步骤如下:1、要导入连接ADO库文件信息,方法#import "C:\Program Files\Common Files\System\a...
    99+
    2022-10-18
  • 如何通过ADO控件访问数据库
    今天就跟大家聊聊有关如何通过ADO控件访问数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。下面以Microsoft Office&nb...
    99+
    2022-10-19
  • 如何通过phonegap操作数据库
    这篇文章主要介绍了如何通过phonegap操作数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实例如下:<!DOCTYPE&nbs...
    99+
    2022-10-19
  • 怎么正确操作ADO数据库
    这篇文章主要讲解了“怎么正确操作ADO数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么正确操作ADO数据库”吧!一、要完成本文中的实例,您需要作如下准备:将Visual Studio...
    99+
    2023-06-17
  • 如何利用C#通过sql语句操作Sqlserver数据库教程
    目录必要准备SQL语句编写加执行编写执行创建执行器ExecuteNonQuery()方式执行二者区别  ExecuteReader()方式执行实例:1-创建一张数...
    99+
    2022-11-13
    c# sql语句 c#操作sqlserver数据库 c# sqlserver
  • 如何通过pycharm实现对数据库的查询等操作(非多步操作)
    目录pycharm对数据库的查询等操作(非多步操作)Pycharm操作数据库步骤服务端配置客户端配置pycharm对数据库的查询等操作(非多步操作) import pymysql i...
    99+
    2022-11-11
  • 如何通过linq语法来操作数据库
    小编给大家分享一下如何通过linq语法来操作数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先创建一个Console Application,然后创建一个名...
    99+
    2023-06-17
  • C#中怎么通过AMO对象浏览SQL SERVER数据库
    这篇文章给大家介绍C#中怎么通过AMO对象浏览SQL SERVER数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。用过SSAS的朋友都使用Visual Studio Business Intelligence De...
    99+
    2023-06-17
  • Android通过Webservice操作sqlserver数据库实例代码
    首页在AndroidManifest.xml中添加访问数据库权限 <uses-sdk android:minSdkVersion="7" /> <uses...
    99+
    2022-06-06
    WebService sqlserver sqlserver数据库 Android
  • Python对数据库操作
    Windows下安装MySQL-python 下载地址:https://pypi.python.org/pypi/MySQL-python/1.2.5 安装到系统即可。 linux下安装MySQL-py...
    99+
    2022-06-04
    操作 数据库 Python
  • 【MySQL】C/C++代码操作数据库
    简单尝试使用c语言的库对mysql的数据进行增删改查 1.新增数据库和表 刚开始数据库没有设定密码和用户,直接用root用户登录 mysql -uroot; 创建一个hello数据库,并进入这个数据库 create database he...
    99+
    2023-08-19
    mysql 数据库 sql
  • C++ 通过pqxxlib库链接 PostgreSql数据库的详细过程
    目录C++ 通过pqxxlib库链接 PostgreSql数据库一. 编译pqxx(老版本)1. libpqxx简介2. 编译环境搭建2.1 PostgreSql下载安装2.2 li...
    99+
    2023-05-14
    C++ PostgreSql数据库 C++ pqxxlib库链接 PostgreSql数据库
  • C# MySQL数据库的操作
    文章目录 前言一、MySQL数据库二、使用步骤 1.引入库2.操作方法总结 前言 记录一下MySQL数据库一些简单操作 一、MySQL数据库 MySQL数据库也不用过多介绍,使用非常广泛。优点就是体积小,速度快,非常适合我们...
    99+
    2023-09-05
    c#
  • 怎么通过shell脚本批量操作mysql数据库
    这篇文章主要讲解了“怎么通过shell脚本批量操作mysql数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过shell脚本批量操作mysql数据库”吧!创建建表语句  =====...
    99+
    2023-06-05
  • python通过远程连接mysql数据库进行操作
    文章目录 前言一、开启远程访问权限1、开启远程访问端口2、命令行登录mysql 二、Navicat 建库1、新建连接2、建库建表 三、python对数据库进行远程操作三、总结四、参考资...
    99+
    2023-09-20
    数据库 python mysql
  • Python 通过pymssql访问查询操作 SQL Server数据库
    在企业应用开发中,经常用到应用程序访问数据库的开发模式,中小企业使用的数据库中,以ms SQL Server居多。本文就以一个简单的实例模型,简单介绍一下python访问ms sql sever数据库...
    99+
    2023-09-24
    数据库 python qt5 sqlserver
  • 02、对数据库的操作
             数据库的操作不管是在Windows系统还是Linux系统的是一样的。小编在此先以Windows系统下安装的数据库为例,Linux系统下如何安装及其使用,在后面的大数据中会讲。 1、创建数据库   CREATE D...
    99+
    2014-09-03
    02 对数据库的操作
  • 数据库对应EFCore操作
    数据库对应EFCore操作 目录数据库对应EFCore操作1,查某个id在某个集合被包含的数据2.查某id集合不被某集合包含的数据 1,查某个id在某个集合被包含的数据 例如: 查 Id 在ids里的结合 ...
    99+
    2021-08-26
    数据库对应EFCore操作
  • C#怎么操作Access数据库
    本篇内容主要讲解“C#怎么操作Access数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么操作Access数据库”吧!C#操作Access数据库之SELECT操作是如何的呢,...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作