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.pswp.cn/news/282870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282870.shtml
英文地址,請注明出處:http://en.pswp.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;你把靜態庫拖到桌面…