一:创建两个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;
}