在VS环境下以ADO方式操作Oracle数据库
来源:互联网 发布:手机midi制作软件 编辑:程序博客网 时间:2024/05/17 09:11
利用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 <afx.h> #include "CDBOperation.h" #include <iostream> #include <afxinet.h> #include <afxwin.h> 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<<"数据库连接成功...."<<endl; } _RecordsetPtr pRst=NULL; //创建一个数据集智能指针 pRst.CreateInstance(__uuidof(Recordset));//初始化Recordset指针 char type; while(true) { cout<<"请输入指令(s、a、d、u):"<<endl; 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<<(LPCTSTR)(_bstr_t)vSno<<(LPCTSTR)(_bstr_t)vName<<endl; } } } 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"); }
- 在VS环境下以ADO方式操作Oracle数据库
- MFC下ADO方式操作数据库
- ADO方式操作数据库
- ado方式操作数据库类
- ado方式操作数据库类
- ado方式操作数据库类
- ado方式操作数据库类
- MFC以ADO方式连接SQL数据库
- VS利用ADO连接数据库的操作
- VC VS用ADO访问操作数据库
- Linux下以命令行方式新建oracle数据库实例
- Oracle数据库分别在Windows/Linux环境下普通/数据泵方式导入/导出示例
- C++ ADO方式连接oracle数据库
- MFC 中ADO方式操作ACCESS数据库
- MFC中ADO方式操作数据库实例
- c++通过ADO方式操作SQLSERVER数据库
- oracle数据库操作方式
- 关于以ODBC和ADO方式访问excel数据库总结
- [Hadoop培训笔记]03-MapReduce集群的安装与部署
- 理解集合类
- Android手机在开发调试时logcat不显示输出信息的解决办法
- How to include <android/bitmap.h> and other *.h NDK libraries to Titanium Android module?
- java Date Calendar 日期函数
- 在VS环境下以ADO方式操作Oracle数据库
- 城市三级联动
- Servlet中的Filter过滤器的介绍和使用 编写过滤器
- 解决TMS Diagram Studio箭头颜色不能变化的问题
- ARC
- 爱车过冬要注意检查 盛德奇嘉教您做好保养
- Linux下安装vmtools图文详解
- Property 'edgesForExtendedlayout' not found on object of type 解决方案
- 什么是网关?网关是否等同于路由器?