VS2012连接Access

一:创建两个Access测试文件test.mdb(office 2003)和test.accdb(office 2007),文件内容均为:



二:打开VS2012,选择菜单:工具->连接到数据库,


更改数据源为:Mircrosoft Access数据库文件。


点击预览,选择test.mdb文件。

点击测试连接,如果连接成功,则会显示测试连接成功。

当显示测试连接成功之后,点击高级按钮,可获得:

Provider=Microsoft.Jet.OLEDB.4.0;

Data Source=E:\**********\***********\test.mdb

这些是编程时需要使用的信息,而且Data Source作为文件路径,特殊字符\要变为\\。

使用测试文件test.accdb时,生成的信息为:

Provider=Microsoft.ACE.OLEDB.12.0;

Data Source=E:\**********\***********\test.accdb

三:测试代码:(使用ADO操纵数据库)

#include <stdio.h>   
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") 
/*
#import生成文件 msado15.tlh,默认是有namespace ADODB {}所有内容都包在这个名字空间中。
用了no_namespace则生成的头文件中没有namespace,所有内容是全局的。 
rename的意思就是改名了,rename("EOF","adoEOF")将EOF改名为adoEOF,
以免和C语言里的EOF重名。
*/
int main(int argc, char* argv[])   
{     
	_ConnectionPtr m_pConnection;  //到access数据库的链接对象   
	_RecordsetPtr m_pRecordset;  //结果集对象   
	CoInitialize(NULL);  //初始化   
	m_pConnection.CreateInstance(__uuidof(Connection)); //实例化对象   
	//连到具体某个mdb   
	try  
	{   
		//test.mdb	
		m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0; \
							Data Source=E:\\PIETYZHOU\\****\\****\\test.mdb", \
							"", "", adModeUnknown);  
		//test.accdb
		//m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;  \
		Data Source=E:\\PIETYZHOU\\****\\*******\\test.accdb",   \
		"", "", adModeUnknown);	
	}   
	catch(_com_error e)   
	{   
			printf("数据库连接失败!\n");   
			system("Pause");
			return 0;   
	}   
	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)   
		{   
			printf(e->ErrorMessage());   
			if(m_pConnection->State)   
			{   
					m_pConnection->Close();   
					m_pConnection= NULL;   
			}
			CoUninitialize();
			return 0;   
		}   
     
		//处理结果集   
		try  
		{      
			//若结果为空,结束   
			if(m_pRecordset->BOF)   
			{   
					printf("表内数据为空!");   
					if(m_pConnection->State)   
					{   
							m_pRecordset->Close();   
							m_pRecordset = NULL;   
							m_pConnection->Close();   
							m_pConnection= NULL;   
					}  
					CoUninitialize();
					return 0;   
			}   
			//游标定位到第一条记录   
			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)   
		{   
			printf(e->ErrorMessage());   
		}   
  
		//退出程序时的处理   
		if(m_pConnection->State)   
		{   
			m_pRecordset->Close();   
			m_pRecordset = NULL;   
			m_pConnection->Close();   
			m_pConnection= NULL;   
		} 
	CoUninitialize();	
	system("Pause");
	return 0;   
} 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值