日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2023/12/4 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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");

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的vs使用ado连接oracle,在VS环境下以ADO方式操作Oracle数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。