[分享]纯c++怎么用ado的方式读取数据库的解决方案

pengyao1207000001 2016-08-19 02:50:53
花了一天时间,百度了n+次,终于弄明白了纯c++怎么用ado的方式读取数据库
分享一下
直接上代码
可以随便弄个表来测试一下
#include"stdafx.h"
#include<iostream>
#include<iomanip>//for setw()
#include"windows.h"
using namespace std;
//导入ADO相关类说明,路径名可以根据自己系统安装的ADO支持文件的路径来自行设定
//#improt语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件)
//语句no_namespace说明ADO对象不使用命名空间,rename("EOF", "EndOfFile")说明将ADO中结束标志EOF改为EndOfFile,以避免和其它库中命名相冲突
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")
int i;
int _tmain(int argc,_TCHAR* argv[])
{
::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备
//_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作
_RecordsetPtr m_pRecordset("ADODB.Recordset");//定义记录集对象
//_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句
_ConnectionPtr m_pConnection("ADODB.Connection");//定义数据库连接对象
try
{
m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
/*****************************************************************************************************************/
//设置连接字符串
_bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\peng\\Desktop\\BHG乐山店上报文件.mdb";
/*****************************************************************************************************************/
m_pConnection->Open(strConnect,"","",adModeUnknown);//NULL、adConnectUnspecified、//建立与服务器连接
if (m_pConnection ==NULL)
{

cerr<<"Lind data ERROR!\n";
}



m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象
/*****************************************************************************************************************/
//在此输入查询条件
//m_pRecordset->Open("select [税号],[金额]from BHG卷票信息 where 日期'20120101' ",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->Open("select *from 测试表名称",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
/*****************************************************************************************************************/




for(i=0;i<=m_pRecordset->GetFields()->Count-1;i++)cout<<(_bstr_t)m_pRecordset->GetFields()->GetItem(long(i))->GetName()<<" ";//打印列名
cout<<"\n";
//查询结果
if (m_pRecordset->EndOfFile)
{
cout<<"无结果\n";
system("pause");
m_pRecordset->Close();//关闭记录集
::CoUninitialize();
return 0;
}

system("pause");
while (!m_pRecordset->EndOfFile)//打印记录
{
for(i=0;i<=m_pRecordset->GetFields()->Count-1;i++)cout<<(_bstr_t)m_pRecordset->GetCollect(m_pRecordset->GetFields()->GetItem(long(i))->GetName())<<" ";
cout<<"\n";
m_pRecordset->MoveNext();//移动下一条记录
}
m_pRecordset->Close();//关闭记录集
}


catch (_com_error e)//捕捉异常
{
cerr<<"\nERROR:"<<(char*)e.Description();//抛出异常
}
if (m_pConnection->State)
{
m_pConnection->Close();
}
::CoUninitialize();
system("pause");
return 0;
}
...全文
588 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andrewdavid 2016-09-05
  • 打赏
  • 举报
回复
引用 楼主 baidu_30174103 的回复:
花了一天时间,百度了n+次,终于弄明白了纯c++怎么用ado的方式读取数据库 分享一下 直接上代码 可以随便弄个表来测试一下
#include"stdafx.h"
#include<iostream>
#include<iomanip>//for setw()
#include"windows.h"
using namespace std;
//导入ADO相关类说明,路径名可以根据自己系统安装的ADO支持文件的路径来自行设定
//#improt语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件)
//语句no_namespace说明ADO对象不使用命名空间,rename("EOF", "EndOfFile")说明将ADO中结束标志EOF改为EndOfFile,以避免和其它库中命名相冲突
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")
int i;
int _tmain(int argc,_TCHAR* argv[])
{
	::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备
	//_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作
	_RecordsetPtr m_pRecordset("ADODB.Recordset");//定义记录集对象
	//_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句
	_ConnectionPtr m_pConnection("ADODB.Connection");//定义数据库连接对象
	try
	{
		m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
/*****************************************************************************************************************/
		//设置连接字符串
		_bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\peng\\Desktop\\BHG乐山店上报文件.mdb";
/*****************************************************************************************************************/
		m_pConnection->Open(strConnect,"","",adModeUnknown);//NULL、adConnectUnspecified、//建立与服务器连接
		if (m_pConnection ==NULL)
		{

			cerr<<"Lind data ERROR!\n";
		}



		m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象
/*****************************************************************************************************************/
		//在此输入查询条件
		//m_pRecordset->Open("select [税号],[金额]from BHG卷票信息 where 日期'20120101' ",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
         m_pRecordset->Open("select *from 测试表名称",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
/*****************************************************************************************************************/




		for(i=0;i<=m_pRecordset->GetFields()->Count-1;i++)cout<<(_bstr_t)m_pRecordset->GetFields()->GetItem(long(i))->GetName()<<" ";//打印列名
		cout<<"\n";
		//查询结果
		if (m_pRecordset->EndOfFile)
		{
			cout<<"无结果\n";
			system("pause");
			m_pRecordset->Close();//关闭记录集
			::CoUninitialize();
			return 0;
		}

		system("pause");
		while (!m_pRecordset->EndOfFile)//打印记录
		{
			for(i=0;i<=m_pRecordset->GetFields()->Count-1;i++)cout<<(_bstr_t)m_pRecordset->GetCollect(m_pRecordset->GetFields()->GetItem(long(i))->GetName())<<" ";
			cout<<"\n";
			m_pRecordset->MoveNext();//移动下一条记录
		}
		m_pRecordset->Close();//关闭记录集
	}


	catch (_com_error e)//捕捉异常
	{
		cerr<<"\nERROR:"<<(char*)e.Description();//抛出异常
	}
	if (m_pConnection->State)
	{
		m_pConnection->Close();
	}
	::CoUninitialize();
	system("pause");
	return 0;
}
老师 如果是调用存储过程该怎么写?
sijiawei007 2016-08-31
  • 打赏
  • 举报
回复
博主,这上面 的代码是应该建立一个新类吗?还是要其他的操作?
paschen 2016-08-20
  • 打赏
  • 举报
回复
使用其COM组件
ztenv 2016-08-20
  • 打赏
  • 举报
回复
打击一下:这不是纯C++
赵4老师 2016-08-19
  • 打赏
  • 举报
回复
楼主的钻研精神值得肯定。
_xiaowugg_ 2016-08-19
  • 打赏
  • 举报
回复

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧