vs使用ado连接oracle,在VS环境下以ADO方式操作Oracle数据库

利用ADO引擎方式访问Oracle数据库的实现方法:

定义数据库头文件为CDBOperation.h

#pragma once

#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF"),rename("LockTypeEnum","AdoLockTypeEnum"),rename("DataTypeEnum","AdoDataTypeEnum"),\

rename("FieldAttributeEnum","AdoFieldAttributeEnum"),rename("EditModeEnum","AdoEditModeEnum"),rename("RecordStatusEnum","AdoRecordStatusEnum"),rename("ParameterDirectionEnum","AdoParameterDirectionEnum")

class CDBOperation

{

public:

//构造对象方法

CDBOperation(void);

~CDBOperation(void);

//连接数据库

bool ConnToDB();

//数据库操作函数(增、删、改、查)

_RecordsetPtr ExecuteWithResSQL(CString);

private:

void PrintErrorInfo(_com_error &);

private:

//初始化数据库连接、命令、记录集

_ConnectionPtr CreateConnPtr();

_CommandPtr CreateCommPtr();

_RecordsetPtr CreateRecsetPtr();

private:

//数据库连接需要的连接、命令、记录集对象

_ConnectionPtr m_pConnection;

_CommandPtr m_pCommand;

_RecordsetPtr m_pRecordset;

};

定义程序源文件CDBOperation.cpp

#include "CDBOperation.h"

CDBOperation::CDBOperation(void)

{

CoInitialize(NULL);

m_pConnection = CreateConnPtr();

m_pCommand = CreateCommPtr();

m_pRecordset = CreateRecsetPtr();

}

CDBOperation::~CDBOperation(void)

{

m_pConnection->Close();

}

bool CDBOperation::ConnToDB()

{

if (NULL == m_pConnection)

{

printf("Failed to create connection\n");

return false;

}

try

{

_bstr_t strConnect="Provider=OraOLEDB.Oracle;User ID=scott;Password=19900624;Persist Security Info=True;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.108.85.137)(PORT = 1521)) )(CONNECT_DATA = (SID = ORCL)(SERVER=DEDICATED)))\"";

HRESULT hr=m_pConnection->Open(strConnect,"","",NULL);

if (TRUE == FAILED(hr))

{

return false;

}

m_pCommand->ActiveConnection = m_pConnection;

return true;

}

catch(_com_error &e)

{

PrintErrorInfo(e);

return false;

}

}

_RecordsetPtr CDBOperation::ExecuteWithResSQL(const char *sql)

{

try

{

m_pCommand->CommandText = _bstr_t(sql);

m_pRecordset = m_pCommand->Execute(NULL, NULL, adCmdText);

return m_pRecordset;

}

catch(_com_error &e)

{

PrintErrorInfo(e);

return NULL;

}

}

void CDBOperation::PrintErrorInfo(_com_error &e)

{

printf("Error infomation are as follows\n");

printf("ErrorNo: %d\nError Message:%s\nError Source:%s\nError Description:%s\n", e.Error(), e.ErrorMessage(), (LPCTSTR)e.Source(), (LPCTSTR)e.Description());

}

_ConnectionPtr CDBOperation::CreateConnPtr()

{

HRESULT hr;

_ConnectionPtr connPtr;

hr = connPtr.CreateInstance(__uuidof(Connection));

if (FAILED(hr) == TRUE)

{

return NULL;

}

return connPtr;

}

_CommandPtr CDBOperation::CreateCommPtr()

{

HRESULT hr;

_CommandPtr commPtr;

hr = commPtr.CreateInstance(__uuidof(Command));

if (FAILED(hr) == TRUE)

{

return NULL;

}

return commPtr;

}

_RecordsetPtr CDBOperation::CreateRecsetPtr()

{

HRESULT hr;

_RecordsetPtr recsetPtr;

hr = recsetPtr.CreateInstance(__uuidof(Recordset));

if (FAILED(hr) ==TRUE)

{

return NULL;

}

return recsetPtr;

}

Oracle数据库的实现main():

#include

#include "CDBOperation.h"

#include

#include

#include

using namespace std;

void main()

{

CDBOperation dbObject;

CString sql;

bool bConn = dbObject.ConnToDB();

if (true == bConn)

{

//AfxMessageBox("connection success \0");

// ::MessageBox(NULL, "abc!",_T("attention"), MB_OKCANCEL == IDOK);

// MessageBox(NULL,"连接数据库出现错误\0",0,0);

cout<

}

_RecordsetPtr pRst=NULL; //创建一个数据集智能指针

pRst.CreateInstance(__uuidof(Recordset));//初始化Recordset指针

char type;

while(true)

{

cout<

cin>>type;

switch(type)

{

case 's':{

//查询

sql="select * from RECV_TABLE";

pRst = dbObject.ExecuteWithResSQL(sql);

if (NULL == pRst)

{

//MessageBox(NULL,_T("查询数据出现错误!\0"),0,0);

printf("查询数据出现错误!\n");

break;

}

if (pRst->adoEOF)

{

pRst->Close();

//AfxMessageBox(_T("There is no records in this table\0"));

//MessageBox(NULL,"There is no records in this table\0",0,0);

printf("There is no records in this table...\n");

break;

}

_variant_t vSno, vName;

if(!pRst->BOF)

{

pRst->MoveFirst();//记录集指针移动到查询结果集的前面

}

while (!pRst->adoEOF)

{

vSno = pRst->GetCollect(_variant_t("SID"));

vName = pRst->GetCollect(_variant_t("CONTENT"));

pRst->MoveNext();

if(vSno.vt != VT_NULL)

{

cout<

}

}

}

break;

case 'a':{

CTime tm = CTime::GetCurrentTime();

CString str=tm.Format("%Y-%m-%d %H-%M-%S");

char arr[]="任何问题都可以帮你解决";

char id[] = "S10011";

CString SID= id;

CString content = arr;

sql="insert into RECV_TABLE (SID,CONTENT,TIME) values ('"+SID+"','"+content+"',to_date('"+str+"','yyyy-mm-dd hh24:mi:ss'))";

pRst = dbObject.ExecuteWithResSQL(sql);

if (NULL != pRst)

{

//AfxMessageBox(_T("插入数据成功\n"));

printf("插入数据成功!\n");

break;

}

}

break;

case 'd':{

//执行删除语句

//sprintf(sql, "delete from RECV_TABLE where SID='%s', "S1003");

sql="delete from RECV_TABLE where SID='S1004'";

pRst = dbObject.ExecuteWithResSQL(sql);

if (NULL != pRst)

{

MessageBox(NULL,_T("删除数据成功\0"),0,0);

break;

}

}

break;

case 'u':{

sql="update RECV_TABLE set CONTENT='cupt5634@126.com' where SID='S1003'";

pRst = dbObject.ExecuteWithResSQL(sql);

if (NULL != pRst)

{

//MessageBox(NULL,_T("更新数据成功\0"),0,0);

printf("更新数据成功!\n");

break;

}

}

break;

}

}

system("PAUSE");

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

httpstat:一个检查网站性能的 curl 统计分析工具

httpstat&#xff1a;一个检查网站性能的 curl 统计分析工具httpstat 是一个 Python 脚本&#xff0c;它以美妙妥善的方式反映了 curl 统计分析&#xff0c;它是一个单一脚本&#xff0c;兼容 Python 3 &#xff0c;在用户的系统上不需要安装额外的软件(依赖)。作者&#xff1a…

Unity(创建脚本)

#一、描述 记录第一课时&#xff0c;脚本的创建与使用基本的API #二、学习记录 &#xff08;一&#xff09;创建一个Cube方块 &#xff08;二&#xff09;在cube组件上添加一个脚本&#xff0c;选中cube组件&#xff0c;在屏幕右侧有着cube的组件属性栏&#xff0c;点击AddComp…

关于面试中看到一些问题

最近公司在招聘.NET开发人员&#xff0c;面试了一些人&#xff0c;有一些感悟&#xff0c;分享出来&#xff0c;以供参考。面试的人员中&#xff0c;有一些是三五年的开发人员&#xff1b;也有几个是10年左右的技术负责人&#xff0c;不但自己架构过项目&#xff0c;还有带领导…

jQuery遍历not的用法

从包含所有段落的集合中删除 id 为 "selected" 的段落&#xff1a; $("p").not("#selected") 定义和用法 not() 从匹配元素集合中删除元素。 语法 1 .not(selector) 参数描述selector字符串值&#xff0c;包含用于匹配元素的选择器表达式。语法 …

linux 字符串加入中括号,Linux Shell 基础 -- 总结几种括号、引号的用法

1、双引号 " "双引号常用于包含一组字符串&#xff0c;在双引号中&#xff0c;除了 "$"、""、" (反引号)"有特殊含义外&#xff0c;其余字符(如IFS、换行符、回车符等)没有特殊含义。$ a3$ echo "$a"输出结果为 3&#xff…

设计模式相关

多例模式 转载于:https://www.cnblogs.com/our880tom/p/6392983.html

一个countDown在多线程调度下使用不当的分享

2019独角兽企业重金招聘Python工程师标准>>> 一个countDown在多线程调度下使用不当的分享 1. 诡异的数据抖动 在一个需求开发过程中&#xff0c;由于有多角色需要获取每个角色下的菜单&#xff1b;结果出现了单角色下拉去菜单没问题&#xff0c;多角色情况下只有一个…

我坚持三年了!

阅读本文大概需要5分钟。不知不觉&#xff0c;公众号写作已经持续了3年了。2019年11月底&#xff0c;心血来潮写了第一篇文章&#xff0c;更多是为了复盘过去的一些工作经历。在前几天&#xff0c;读者数突破了16万&#xff0c;虽然这个数字相比那些头部大号而言并不多&#xf…

关于Qt模态框总汇

转载请注明出处&#xff1a;http://www.cnblogs.com/dachen408/p/7285710.html 父窗体为QMainWindow&#xff1b; 当子窗体为&#xff1a; 1.QWidget&#xff0c;需要设置 this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); this->setWindowModality(Qt::Win…

linux脚本打印循环次数,shell脚本编程基础(3)——循环用法

本节索引&#xff1a;一、if、case条件判断二、for、while及until循环三、循环控制语句continue、break、shift及select菜单四、信号捕捉trap在前面的基础编程内容中&#xff0c;我们已经学习了shell脚本的顺序执行及选择执行&#xff0c;通过这两种方式&#xff0c;可以帮我们…

RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)

github&#xff1a;https://github.com/revmischa/rtsp-server 轻量级RTSP / RTP流媒体服务器

EF CORE 7 中的新功能:使用 ExecuteDelete 和 ExecuteUpdate 进行批量操作

原文链接&#xff1a;https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate原文作者&#xff1a;tim_deschryver翻译&#xff1a;沙漠尽头的狼(谷歌翻译加持)Entity Framework 7 包括一些已被要求的流行功能&#…

java 简单json和对象相互转换

2019独角兽企业重金招聘Python工程师标准>>> package Fasterxml; import com.fasterxml.jackson.databind.ObjectMapper; import mode.User; import java.io.StringWriter; import java.util.ArrayList; import java.util.List;/*** maven...**<dependency>* …

畅想动画制作的乐趣

为什么要制作动画&#xff1f; 现在的营销活动&#xff0c;用一个很简单的图片去吸引消费者已经远远不够。想让消费者创造GMV&#xff0c;肯定需要让消费者觉得眼前一亮或是有视觉冲击的东西&#xff0c;或者在动画过程中提供更好的引导部分&#xff0c;比如红包&#xff0c;引…

Linux的scan命令,linux的scan命令

linux下scan命令主要是以scanf的形式使用转换符解析字符串&#xff0c;下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux下scan命令的相关知识&#xff0c;希望对大家有帮助!linux的scan命令详解scan - 以sscanf的形式使用转换符解析字符串语法:scan string format ?varna…

Spring Cloud Gateway 原生支持接口限流该怎么玩

关于pig&#xff1a; 基于Spring Cloud、oAuth2.0开发基于Vue前后分离的开发平台&#xff0c;支持账号、短信、SSO等多种登录&#xff0c;提供配套视频开发教程。 关于 Spring Cloud Gateway SpringCloudGateway是Spring官方基于Spring 5.0&#xff0c;Spring Boot 2.0和Projec…

我的手机 不支持箭头函数

不支持&#xff0c;要换成function的形式 转载于:https://www.cnblogs.com/web-fusheng/p/7295901.html

中标麒麟linux卸载qt,国产化 银河麒麟编译Qt程序的问题汇总 | 阿拉灯

Run in terminal莫名奇妙软件无法在QtCreator中运行或者调试&#xff0c;main函数都无法进入&#xff0c;QtCreator中一运行就崩溃&#xff0c;并跳到汇编界面&#xff0c;这多半和代码没什么关系&#xff0c;我这里是将项目->运行中的“Run in terminal”去掉勾选&#xff…

css3-13 如何改变文本框的轮廓颜色

css3-13 如何改变文本框的轮廓颜色 一、总结 一句话总结&#xff1a;outline使用和border很像&#xff0c;几乎一模一样&#xff0c;多了一个offset属性 1、轮廓outline如何使用&#xff1f; 使用和border很像&#xff0c;几乎一模一样&#xff0c;多了一个offset属性 18 …

ios添加设备真机测试,以及Undefined symbols for architecture x86_64:''错误

问题今天坑了好久&#xff0c;然后找了各种资料 添加设备这个直接去开发者中心添加一个设备进去就好&#xff0c;具体流程百度&#xff0c;第二个问题是属于路径不对或者是静态库没有添加成功&#xff0c;项目可以看到&#xff0c;到时路径找不到&#xff0c;你把静态库拖到桌面…