0

0

MFC 中用ADO访问数据库

php中文网

php中文网

发布时间:2016-06-07 15:12:06

|

1987人浏览过

|

来源于php中文网

原创

个人觉得,数据库操作连接和操作上手很快,但是那些类型总是会让你头疼 目前我还没搞清楚用怎么从T-SQL 的decimal技术到MFC中相应的数据?? 将一下数据库连接的步骤 一:加载动态链接库 #import C:\Program Files\Common Files\System\ADO\msado15.dll \ no

个人觉得,数据库操作连接和操作上手很快,但是那些类型总是会让你头疼

目前我还没搞清楚用怎么从T-SQL 的decimal技术到MFC中相应的数据??


将一下数据库连接的步骤


一:加载动态链接库

       #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")

讲一下这句话什么意思,就是导入动态链接库,否则你的那个什么ptrConn,ptrRecord连接指针,都会在编译的时候报错

第二个rename,EOF替换成,EndOfFile是为了在从记录集Recordset取出来时候,判断是否到达了结尾

如果是到达了结尾,那么就会返回非VARIANT_FALSE


二:声明连接指针和记录集

_ConnectionPtr ptrConn; // 定义Connection对象
_RecordsetPtr  ptrRecord;

三:创建连接

CoInitialize(NULL); //不要忘记了,否则指针全部为空,无效  

NT80 购物系统
NT80 购物系统

功能说明:1 会员可申请开店功能2 购买在线扣除金额3 冲值卡自动生成4 支持2级分类5 数据库压缩和备份6 会员分5个级别7 商品带讨论8 自带融合论坛,可关闭打开9 密码找回功能10 新闻``滚动新闻``帮助中心11 后台设置前台会员的上传权限12 可关闭/打开商店13 会员自助发布商品功能14 用户问题咨询管理

下载

try//打开连接
	{

	// 创建一个连接实体
	ptrConn.CreateInstance(__uuidof(Connection));
	// 设定连接等待的最大秒数,默认是15秒
	ptrConn->ConnectionTimeout = 20;
	// 打开连接
    ptrConn->Open("driver={SQL server};server=127.0.0.1;uid=laicb;pwd=616458;database=DBCourse", 
	"",//登录用户名
	"",//登录密码
	adConnectUnspecified);//打开连接
	}
	catch(_com_error &e)--捕获异常
	{
		CString str;
		CString strTemp;
		str.Format(TEXT("Error:\n"));
		strTemp.Format(TEXT("Code = %08lx\n"), e.Error());
		str+="\n";
		str+=strTemp;
		
		strTemp.Format(TEXT("Meaning = %s\n"), e.ErrorMessage());
		str+="\n";
		str+=strTemp;

		strTemp.Format(TEXT("Source = %s\n"), (wchar_t*) e.Source());
		str+="\n";
		str+=strTemp;

		strTemp.Format(TEXT("Description = %s\n"), (wchar_t*) e.Description());
		str+="\n";
		str+=strTemp;
		MessageBox(str);
	}
四:打开记录集,初始化记录集

try
	{
	//_RecordsetPtr ptrRS; // recordset 对象
	// 创建recordset 对象实体

	ptrRecord.CreateInstance(__uuidof(Recordset));//有些时候如果记录级背使用过了,可能需要重新创建实例,然后再打开
	ptrRecord->Open("select * from dbo.StaffInfo",///为什么把这里的数据库改成dbo.StaffRecord时候,列表框就显示全为空
	ptrConn.GetInterfacePtr(),
	adOpenKeyset, //注意在VB说明文档时候,首字母a是大写的,在C++中应该小写
	adLockBatchOptimistic, 
	adCmdText);
	//int j= ptrRecord->RecordCount;
	//或者
	//ptrRS = ptrConn ->Execute(m_ strSql,NULL, adCmdText);

	}
	catch(_com_error &e)
	{
		CString str;
		CString strTemp;
		str.Format(TEXT("Error:\n"));
		strTemp.Format(TEXT("Code = %08lx\n"), e.Error());
		str+="\n";
		str+=strTemp;
		
		strTemp.Format(TEXT("Meaning = %s\n"), e.ErrorMessage());
		str+="\n";
		str+=strTemp;

		strTemp.Format(TEXT("Source = %s\n"), (wchar_t*) e.Source());
		str+="\n";
		str+=strTemp;

		strTemp.Format(TEXT("Description = %s\n"), (wchar_t*) e.Description());
		str+="\n";
		str+=strTemp;
			MessageBox(str);
	}
五,执行语句

	try
	{
	ptrConn->Execute("select * from dbo.Login",NULL,adCmdText);
	ptrRecord->MoveFirst();//加了这句这会就可以取出数据了,可能是上一个父亲指针已经把其移动到最后了
	int i= ptrRecord->RecordCount;//如果把游标从动态到记录集,那么这个参数就有用
	while(ptrRecord->EndOfFile==VARIANT_FALSE)
	{	
		_variant_t va;
		_variant_t str;
		va.vt=VT_I4;
		va.lVal=0;
		str = ptrRecord->Fields->GetItem(va)->Value;
		CString strGetID((wchar_t*)(_bstr_t)str);
		str = ptrRecord->Fields->GetItem(short(1))->Value;
		CString strGetSerect((wchar_t*)(_bstr_t)str);
		strGetID.TrimRight();
		strGetSerect.TrimRight();
		right=ptrRecord->Fields->GetItem(short(2))->Value.intVal;
		if(strGetID==strID&&strGetSerect==strSerect)
		{
			isadmin=true;
		}
		ptrRecord->MoveNext();
	}
	}
	catch(_com_error &e)
	{
		CString str;
		CString strTemp;
		str.Format(TEXT("Error:\n"));
		strTemp.Format(TEXT("Code = %08lx\n"), e.Error());
		str+="\n";
		str+=strTemp;
		
		strTemp.Format(TEXT("Meaning = %s\n"), e.ErrorMessage());
		str+="\n";
		str+=strTemp;

		strTemp.Format(TEXT("Source = %s\n"), (wchar_t*) e.Source());
		str+="\n";
		str+=strTemp;

		strTemp.Format(TEXT("Description = %s\n"), (wchar_t*) e.Description());
		str+="\n";
		str+=strTemp;
		AfxMessageBox(str);
	}
Connection::Execute来执行SQL语句,如果有返回结果的,那么就返回Recordset,如果无需返回的就可以直接执行

取出查询结果是

 ptrRecord->Fields->GetItem(va)->Value;
 ptrRecord->Fields->GetItem(va)->Name;
va是
_variant_t va;
va.vt=VT_I4;
va.lVal=0;
也可以这样
 ptrRecord->Fields->GetItem(short(0))->Name;
返回结果是

while(ptrRecord->EndOfFile==VARIANT_FALSE)
取出结果集
ptrRecord->MoveNext();

有些时候,如果你的结果集已经被全部取出来的时候,也就是你的结果集已经到了非VARIANT_FALSE
这时候你就需要重新创建实例,然后打开,
ptrRecord.CreateInstance(__uuidof(Recordset));//有些时候如果记录级背使用过了,可能需要重新创建实例,然后再打开
	ptrRecord->Open("select * from dbo.StaffInfo",///为什么把这里的数据库改成dbo.StaffRecord时候,列表框就显示全为空
	ptrConn.GetInterfacePtr(),
	adOpenKeyset, //注意在VB说明文档时候,首字母a是大写的,在C++中应该小写
	adLockBatchOptimistic, 
	adCmdText);

这样你才能重新使用,不然好像MoveFirst,么有用啊
另外如果你结果集在某处调用了close,那么你再次使用的时候一定要执行上面这段语句,否则会报说记录集已经关闭了,wufa使用


六:Command对象的使用

try
{
// Create Connection Object (1.5 Version)
Conn1.CreateInstance( __uuidof( Connection ) );
Conn1->ConnectionString = bstrConnect;
Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty, -1 );
// Create Command Object
Cmd1.CreateInstance( __uuidof( Command ) );
Cmd1->ActiveConnection = Conn1;
Cmd1->CommandText = _bstr_t("SELECT * FROM mytable WHERE age

然后执行就可以了cmd1->Execute就OK了


结束:

一些释放操作,置空操作



相关专题

更多
PHP 表单处理与文件上传安全实战
PHP 表单处理与文件上传安全实战

本专题聚焦 PHP 在表单处理与文件上传场景中的实战与安全问题,系统讲解表单数据获取与校验、XSS 与 CSRF 防护、文件类型与大小限制、上传目录安全配置、恶意文件识别以及常见安全漏洞的防范策略。通过贴近真实业务的案例,帮助学习者掌握 安全、规范地处理用户输入与文件上传的完整开发流程。

1

2026.01.13

PPT交互图表教程大全
PPT交互图表教程大全

本专题整合了PPT交互图表相关教程汇总,阅读专题下面的文章了解更多详细内容。

41

2026.01.12

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

19

2026.01.12

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

134

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

66

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

139

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

19

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

105

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.5万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.5万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号