现在的位置: 首页 > 综合 > 正文

【数据库访问】C++通过ADO访问数据库

2018年02月17日 ⁄ 综合 ⁄ 共 1844字 ⁄ 字号 评论关闭

ADO (ActiveXData ObjectsActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。
ADO
使您能够编写应用程序以通过 OLE. DB供者访问和操作数据库服务器中的数据。相对于直接访问ODBC接口,ADO更便捷。

下面介绍下在VC环境,通过ADO链接和操作SQLServer数据库的一般方法:
VC中使用ADO数据库,主要是使用ADO所提供的ConnectionCommand、和Recordset对象来进行对数据库的访问。

一:导入ADO库文件

使用ADO访问数据库要用到msado15.dll库文件。这个文件的一般路径是:C:\ProgramFiles\CommonFiles\System\ado\msado15.dll

导入方法,加入如下代码段:

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")

语句no_namespace的作用是,设置调用的dll中的函数没有名称空间。renam("EOF","rsEOF")只是为了避免EOFC++EOF混淆。

二、初始化OLE/COM库环境 

ADO

ADO库是一组COM动态库,程序在调用ADO前,须初始化OLE/COM库环境。可以调用WindowsAPI::Initialize(NULL),当然在使用后要记着调用::Uninitialize()释放。

三、使用ADO对象,操作数据库

1.使用Connection


代码如下:

int _tmain(int argc, _TCHAR* argv[])
{
	::CoInitialize(NULL);
	_ConnectionPtr pConn(__uuidof(Connection));
	_RecordsetPtr pRs(__uuidof(Recordset));

	pConn->ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=bbs";
	pConn->Open("","sa","sql2008",adConnectUnspecified);
	pRs = pConn->Execute("select * from article",NULL,adCmdText);

	while(!pRs->rsEOF)
	{
		printf((_bstr_t)pRs->GetCollect("title"));
		printf("\n");
		pRs->MoveNext();
	}

	pRs.Release();
	pConn.Release();
	::CoUninitialize(); 
	return 0;
}

2.使用Command

int _tmain(int argc, _TCHAR* argv[])
{
	::CoInitialize(NULL);
	_ConnectionPtr pConn(__uuidof(Connection));
	_RecordsetPtr pRst(__uuidof(Recordset));
	_CommandPtr pCmd(__uuidof(Command));

	pConn->ConnectionString="Provider=
		SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=bbs";
	pConn->Open("","sa","sql2008",adConnectUnspecified);

	 
	pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
	pCmd->CommandText="select * from article";
	pRst=pCmd->Execute(NULL,NULL,adCmdText);
	while(!pRst->rsEOF)
	{ 
		printf((_bstr_t)pRst->GetCollect("title"));
		printf("\n");
		pRst->MoveNext();
	} 
	pRst->Close();
	pConn->Close();
	pCmd.Release();
	pRst.Release();
	pConn.Release();
	::CoUninitialize();
	return 0;
}

抱歉!评论已关闭.