C++中ADO访问数据库方法?

C++中ADO访问数据库方法?,第1张

这个过程有点复杂,详细请参阅孙鑫《VC++深入详解》最后一章,HOOK和数据库访问技术,那里讲得更明白!

#include

<iostream>

#include

<string>

using

namespace

std

//导入ADO动态链接库,必须的

#import

"c:\program

files\common

files\system\ado\msado15.dll"no_namespace

rename("EOF","adoEOF")

void

main()

{

_ConnectionPtr

m_pConnection

//创建智能指针,必须的

m_pConnection.CreateInstance(__uuidof(Connection))

//或

m_pConnection.CreateInstance("ADODB.Connection")

CoInitialize(NULL)

//初始化COM,必须的

try

{

//连接字符串,Student为数据库名

m_pConnection->ConnectionString="Provider=SQLOLEDB.1Password=saPersist

Security

Info=TrueUser

ID=saInitial

Catalog=Student"

m_pConnection->Open("

","

","

",adModeUnknown)

//调用Open方法

cout<<"1"<<endl

}

catch(_com_error

e)

//捕获连接异常

{

cout<<"数据库初始化错误!

"<<endl

return

}

cout<<"连接成功!"<<endl

_RecordsetPtr

pRst(__uuidof(Recordset))

pRst=m_pConnection->Execute("select

*

from

student",NULL,adCmdText)//使用Execute方法,student为表名

if(!pRst>adoEOF)

pRst>MoveFirst()

else

{

cout<<"表内数据为空"<<endl

return

}

//

读入库中各字段并加入列表框中

_variant_t

var

string

strName

while(!pRst>adoEOF)

{

var

=

pRst>GetCollect("Name")

if(var.vt

!=

VT_NULL)

strName

=

(LPCSTR)_bstr_t(var)

pRst>MoveNext()

}

//关闭

pRst->Close()

m_pConnection->Close()

pRst.Release()

m_pConnection->Release()

CoUninitialize()

//释放COM

}

1、C/C++与数据库交互,像 mssql/ mysql / oracle 等,一般都有成熟的第三方库,这些库里面无非就是封装了与数据库通讯的方式和通讯协议搜一下要用的数据库相关的 API 文档,会说得很清楚任何文件都是二进制数据,关键是数据存储的组织方式通用扩展名的文件,像gif/doc/jpg/wav,格式都是固定的。

2、举个例子,连接SQL:

// 打开数据库

strDBClass.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0Data Source=%sJet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword)

// 创建连接

HRESULT hr = m_pConnection.CreateInstance(_uuidof(Connection))

_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified)

// 声明表单指针

_RecordsetPtr pBandRecordset

pBandRecordset.CreateInstance(__uuidof(Recordset))

// 执行语句

CString strSQL(L"SELECT * FROM [Band]")

m_pConnection->Execute((LPCTSTR)strSQL,NULL,0)

// 提取某一项 例如BandInfo

int iBandInfo = wcscmp(colum, L"BandInfo")

while(!recordsetPtr->adoEOF)

{

var = recordsetPtr->GetCollect(colum)

if(var.vt != VT_NULL)

strName = (LPCSTR)_bstr_t(var)

recordsetPtr->MoveNext()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9970472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存