VC++学习-数据库篇(ADO连接ACCESS)

编程环境:VS2013,MFC
转载自:
https://blog.csdn.net/segen_jaa/article/details/7722143
https://blog.csdn.net/cyuyan112233/article/details/51475372
https://blog.csdn.net/MoreWindows/article/details/8266682
ADO (ActiveX Data Object)主要基于COM技术,它是Microsoft数据库应用程序开发的新接口,其主要的优点是易于使用、速度快、内存支出少。

ADO连接access数据库

指令

 _ConnectionPtr m_pConnection;//ConnectionPtr指针用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句
_RecordsetPtr m_pRecordset;//_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作

初始化COM

方法1:AfxOleInit()

导入ADO库

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

这一条语句将为程序导入ADO库,在编译时会生成msado15.tlh,ado15.tli来定义ADO库。
**CoInitialize()函数来初始化COM环境,与之对应CoUninitialize()**来清空COM环境。
可以看出ADO方式连接数据库也是在导入ADO库后主要使用_ConnectionPtr、_CommandPtr和_RecordsetPtr来完成访问数据库的。
更多ADO方式连接数据库的例子可以参考下面的文章:
1.http://www.vckbase.com/index.php/wv/311
2.http://www.vckbase.com/index.php/wv/118

VC6.0下使用ADO方式来连接数据库的简要范例代码

// VC++ ADO方式访问数据库
// By MoreWindows ( http://blog.csdn.net/MoreWindows )
#include <stdio.h>
#include <objbase.h>
//导入ADO库
#import "c:\\program files\\common files\\system\\ado\\msado15.dll" no_namespace rename("EOF", "adoEOF")
int main()
{
	//初始化com环境
	CoInitialize(NULL);  
	_ConnectionPtr   pConnect(__uuidof(Connection));
	_RecordsetPtr    pRecord(__uuidof(Recordset));
	_CommandPtr      pCommand(__uuidof(Command));
	//__uuidof表示取和某个标示符相关联的GUID
	try
	{
		//连接Sql server数据库
		//数据库IP地址为222.197.165.36
		//数据库名为MyTestDB 用户名sa 密码4321
		pConnect->ConnectionString = "Provider=SQLOLEDB; Server=222.197.165.36; Database=MyTestDB; uid=sa; pwd=4321;";
		pConnect->Open("", "", "", adConnectUnspecified);
		
		//执行sql命令,结果记录在_RecordsetPtr中
		//数据表t_student中有id, name, age三列
		pCommand->put_ActiveConnection(_variant_t((IDispatch *)pConnect));
		pCommand->CommandText = "select id, name from t_student where age >= 18";
		pRecord = pCommand->Execute(NULL, NULL, adCmdText);
 
		_variant_t vNum;
		_bstr_t bstr;
		char szName[100];
 
		while (!pRecord->adoEOF)
		{	
			// id
			vNum = pRecord->GetCollect("id");
			printf("%d ", (int)vNum.intVal);
		
			// name
			vNum = pRecord->GetCollect("name"); //如果列名不对会引发错误
			bstr = vNum;        
			strcpy(szName, (PCSTR)bstr);
			printf("%s\n", szName);
 
			// 取下一条记录
			pRecord->MoveNext();
		}
	}
	catch (_com_error err)
	{
		printf("Error! %s\n", err.ErrorMessage());
	}
	
	pRecord->Close();
	pConnect->Close();
	pCommand.Release();
	pRecord.Release();
	pConnect.Release();
 
	//清空COM环境
	CoUninitialize();
	return 0;
}

连接ACCESS数据库代码

m_pConnection->ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\\Data.mdb;"; //红字代表mdb位置。

如果使用上面的方式,并且数据库的路径是正确的。还报错说 : 数据库连接失败,确认数据库Data.mdb是否在当前路径下! 那么很有可能是 <数据库引擎可再发行程序> 没有安装,下载 <链接 : 数据库引擎可再发行程序包 提取码 : pret > 安装即可,再运行连接access数据库即可连接成功。

下面我是将MFC连接office2013的access数据库的代码写到一个方法里面了,在获取表名的代码里面只需要调用该类的这个方法就行。
核心代码如下:

void datamdbbase()
{
	if(!AfxOleInit())
	{
		AfxMessageBox(_T("ADO初始化失败。"));
		return;
	}
 
	try
	{
		CoInitialize(NULL);
		m_pConnection = _ConnectionPtr(__uuidof(Connection));
		//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data.mdb","","",adModeUnknown);		//左边这个是office2003以下低版本链接使用
		m_pConnection->ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\\Data.mdb;";		//office高版本使用,如果连接不成功可能是 数据库引擎可再发行程序 没有安装,安装 <<数据库引擎可再发行程序包>> 即可
		
		m_pConnection->Open("", "", "", adConnectUnspecified);
		//带密码的数据库连接字符串"uid=admin;pwd=168168;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\iCCard\\iCCard.mdb;"
	}
	catch(_com_error e)
	{
		AfxMessageBox("数据库连接失败,确认数据库Data.mdb是否在当前路径下!");
		return;
	}
}

Visual Studio项目相对路径的设置

这篇文章主要写给那些以前没有用过VS的新手,同时也是自己学习经验的积累,高手就不用看了以免浪费您宝贵的时间。
在VS的工程中常常要设置头文件的包含路径,当然你可以使用绝对路径,但是如果你这样设置了你只能在你自己的机器上运行该工程;如果其他人拷贝你的工程到其他机器上就可能无法运行,这个是因为你在建工程时可能把工程放在了E:盘,但是其他人可能会把工程放在其他根目录下,这样会导致找不到头文件问题。
对于新手,在设置绝对路径时往往会犯浑,他们不清楚这里的“相当”究竟是以什么位置为起点。其实这里的相对路径就是相当于工程文件(XXXX.vcproj)为起点零计算出的能找到包含所需头文件(也就是找包含所需头文件的include目录)的路径。
例如你的工程文件(AmarylloLib.vcproj)所在目录路径为:
F:\game\Test\TraxAmaryllo\lib\wince5_vs2005_arm_d
该工程中包含的源文件要包含一个头文件,该头文件所在路径如下:
F:\game\Test\TraxAmaryllo\include
则我们可以从工程文件AmarylloLib.vcproj所在目录为起点向上回退到包含你所需要头文件的include文件夹所在的目录目录,你回退了几次就需要几个"…"符号。
这里的相对路径设置如下:
…\include
我们来回退一下:
在AmarylloLib.vcproj当前目录下,回退一次到了包含wince5_vs2005_arm_d的文件夹lib下,再回退一次就到达了包含lib文件夹的TraxAmaryllo目录下,而在该目录下就包含我们需要包含的头文件所在的目录include目录。所有要在工程文件当前目录下要向上回退两次才能看到include目录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值