C++连接Access数据库

#include <iostream>
using namespace std;
/*#import生成文件 msado15.tlh,默认是有namespace ADODB {}所有内容都包在这个名字空间中。
用了no_namespace则生成的头文件中没有namespace,所有内容是全局的,否则ADODB.Connection
rename的意思就是改名了,rename("EOF","adoEOF")将EOF改名为adoEOF,以免和C语言里的EOF重名*/
#import "c:\program files\common files\system\ado\msado15.dll"  no_namespace  rename ("EOF", "adoEOF")

void main()
{
	CoInitialize(NULL);         //初始化OLE/COM库环境
	//在引入ado并初始化成功com库后,就可以使用智能指针了
	_ConnectionPtr m_pConnection;  
	_RecordsetPtr m_pRecordset;  
	HRESULT hr;
    try
    {
		hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
   //     hr = m_pConnection.CreateInstance(__uuidof(Connection));//no_namespace的好处
		
        if(SUCCEEDED(hr))
        {            
            hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);          //access2003
//			hr = m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb","","",adModeUnknown);    //access2007
			printf("成功连接数据库\n");
        }
    }
    catch(_com_error e)///捕捉异常
    {       
       printf("连接数据库失败!\n");
	   return ;
    }
		m_pRecordset.CreateInstance(__uuidof(Recordset)); //实例化结果集对象   
	//执行sql语句   
		try  
		{   
			char sql[300];   
			memset(sql,0,300);   
			strcat(sql,"SELECT * FROM lyrtest");     
			m_pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);   
		}   
		catch(_com_error* e)   
		{   
			wprintf(e->ErrorMessage());   
			if(m_pConnection->State)   
			{   
					m_pConnection->Close();   
					m_pConnection= NULL;   
			}
			CoUninitialize();
			return;   
		}   
		try  
		{      
			//若结果为空,结束   
			if(m_pRecordset->BOF)   
			{   
					printf("表内数据为空!");   
					if(m_pConnection->State)   
					{   
							m_pRecordset->Close();   
							m_pRecordset = NULL;   
							m_pConnection->Close();   
							m_pConnection= NULL;   
					}  
					CoUninitialize();
					return;   
			}   
			cout<<"---------------------------------"<<endl;
			cout<<"数据库的内容为:"<<endl;
			//游标定位到第一条记录
			m_pRecordset->MoveFirst(); 
			_variant_t var[2]; //从结果集中取出的数据放到var中
			char *t1[2]; 
			while(!m_pRecordset->adoEOF)
			{   
					var[0]= m_pRecordset->GetCollect("ID");   
					if(var[0].vt != VT_NULL)   
					{   
							t1[0] = _com_util::ConvertBSTRToString((_bstr_t)var[0]);   
					}   
					printf(t1[0]);
					printf("\t");
					var[1]= m_pRecordset->GetCollect("Name");   
					if(var[1].vt != VT_NULL)   
					{   
						t1[1] = _com_util::ConvertBSTRToString((_bstr_t)var[1]);   
					} 
					printf(t1[1]);
					printf("\n");   
					m_pRecordset->MoveNext();   
			}   
		}   
		catch(_com_error *e)   
		{   
			wprintf(e->ErrorMessage());   
		}   
	
		//退出程序时的处理   
		if(m_pConnection->State)
		{   
			m_pRecordset->Close();   
			m_pRecordset = NULL;   
			m_pConnection->Close();   
			m_pConnection= NULL;   
		} 
	CoUninitialize();		
	cout<<"---------------------------------"<<endl;
	return; 
}

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值