孙鑫VC学习笔记:第二十讲 (二) ado数据库编程

孙鑫视频VC++深入详解学习笔记 <br />VC++深入详解学习笔记<br />Lesson1: Windows程序运行原理及程序编写流程<br />Lesson2: 掌握C++基本语法<br />Lesson3: MFC框架程序剖析<br />Lesson4: 简单绘图<br />Lesson5: 文本编程<br />Lesson6: 菜单编程<br />Lesson7: 对话框编程<br />Lesson9: 定制应用程序的外观<br />Lesson10: 绘图控制<br />Lesson11 图形的保存和重绘<br />Lesso 阅读详情
数据库编程:
COM
[计] 小型可执行程序的扩展名, 串行通讯端口
[域] Commercial organizations,商业组织,公司
The Component Object Model组件对象模型
ADO的三个核心对象
Connection对象
Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。Recordest和Command对象都有一个ActiveConnection属性,该属性用来饮用Connection对象。
Command对象
Command对象被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。
Recordset对象
Recordset对象被用来获取数据。Recordset对象存放查询的结果,这些结果又数据的行(称为记录)和列(成为字段)组成。每一列都存放在Recordset的Fields集合中的一个Filed对象中
 
 
 
关于ADO数据库连接方面知识的总结
 
1、导入库文件
 
使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
#import "C:/Program Files/common files/system/ado/msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")
 
ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。
类型库描述了自治接口,以及C++使用的COM vtable接口。
当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,
并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,#import引入ADO库文件的代码编译后,在项目的目录下生成了这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。
程序的第三行指示ADO对象不使用名称空间,在有些应用程序中,
由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。
如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。
第四行代码将ADO中的EOF(文件结束)更名为adoEOF,因为文件的结尾也是以EOF结尾的,是为了避免与定义了自己的EOF的其他库冲突。 至于改为什么名字,可以根据自己的命名习惯自己确定。
 
 
2、初始化COM环境
OLE DB 是基于COM技术编写的,ADO是OLE DB基础之上的用户程序,
OLE DB是一个COM组件,在访问COM组件的时候需要初始化COM库,方法如下:
(1)   ::CoInitialize(NULL); //初始化OLE/COM库环境
//对数据库的访问在上下代码之间写,下面第三步就应该写在这里
::CoUninitialize();//既然初始化了环境,当然一定要记得释放他了
(2)也可以调用MFC全局函数
AfxOleInit();
 
3、三大指针对象的定义和创建实例
 
(1)
_ConnectionPtr pConnection("ADODB.Connection");
_RecordsetPtr pRecordset("ADODB.Recordset");
_CommandPtr pCommand("ADODN.Command");
 
(2)
 _ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_CommandPtr pCommand;
 
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));
pCommand.CreateInstance(__uuidof(Command));
 
要产生一个智能指针对象,其实在定义的同时也可以初始化,如:
_ConnectionPtr pConnection(__uuidof(Connection));
_ConnectionPtr 是智能指针
__uuidof() 用来获取Connection全局唯一标识符
 
(3)
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
_CommandPtr pCommand;
 
pConnection.CreateInstance("ADODB.Connection");
pRecordset.CreateInstance("ADODB.Recordset");
pCommand.CreateInstance("ADODB.Command");
 
4、打开一个连接
pConnection->ConnectionString = "这里的字符串有下面四种写法";//对连接字符串赋值
pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库
第二三个参数分别为用户的ID与密码,
因为在连接字符串ConnectionCstring中已经设置好了,这里可以为空。
第四个参数可以取下面两个参数:
adAsyncConnect
异步打开数据库,在ASP中直接用16
adConnectUnspecified
同步打开数据库,在ASP中直接用-1
 
ConnectionString根据不同的数据源,分别对应不同的写法
(要记下来很困难,可以在VB中利用ADO控件先连接好,再将其拷贝在VC中,这样不容易出错)
    1)
访问Access 2000
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord"
 
    2)
访问ODBC数据
"Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;"
 
   3)
访问Oracle数据库
“Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;"
 
   4)
访问MS SQL数据库
"Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"
 
5、执行SQL命令,得到数据
方法1:
pRecordset = pConnection->Execute("Select * from authors",NULL,adCmdText);
方法2:
pRecordset ->Open("Select * from authors",_
variant_t((Idispacth*) pConnection), //设置活动连接
adOpenDynamtic,
//游标类型
adLockOptimistic,
//锁的类型
adCmdText);
方法3:
pCommand->put_ActiveConnection(_variant_t((Idispatch *) pConn);
pCommand->CommandText = "Select * from authors";
pRecordset = pCmd->Execute(NULL,NULL,adCmdText);
 
 
得到数据之后,做一个循环取得数据:
While (!pRecordset ->adoEOF)
{
Str = pRecordset->GetCollect("au_lname"));
pRst->MoveNext();
}
SQL命令比较多,但是不去考虑细节,这里只说出通用的方法
CString strSQL;//定义SQL命令串,用来保存SQL语句
 
strSQL.Format("SQL statement");
 
然后在每个要用到SQL命令串的方法中,使用strSQL.AllocSysString()的方法进行类型转换
 
6、com的专用数据类型
 
variant ,bstr ,SafeArray
 
variant变量的范围包括很多,它是一种变体类型,主要用于支持自动化的语言访问,
从而在VB中非常方便地使用,但是VC中比较复杂,它使用_variant_t 进行管理
bstr是一种字符串变量,使用_bstr_t进行管理,这个类重载了char *操作符
 
7、关闭连接
 
if(pConnection->State);     //不能多次关闭,否则会出现错误
pConnection->Close();
pRecordset->Close();
pCommand.Release();
pConnection.Release();
//释放引用计数
pRecordset.Release();
 
 
    注意:调用Close()时用"->",调用Release()时要用".",为什么?
因为智能指针,_ConnectionPtr是一个重载了->运算符的类
 
_ConnectionPtr:它是一个接口指针模板。'.'是模板_com_ptr的函数。->是'接口函数'调用。
//forexample:
_ConnectionPtr m_Conn;
m_Conn.CreateInstance(....);//Createinterfaceinstance.
m_Conn->Open(...);//Openaconnectiontodatabase.
 
'->'是_com_ptr重载了的运算符.目的就是为了让你调用模板参数的函数.
 
8、结构化异常处理
ADO封装了COM接口,所以需要进行错误处理
如下例:
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; }
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
 
这里介绍了三种对象通过ADO访问数据库,它们都可以执行SQL语句获取数据,但不是管那种方法获取数据,最终都将数据放置到记录集对象当中。
 
VC++操作数据库ADO封装类 整理文件发现,参考接口说明: http://www.vckbase.com/module/articleContent.php?id=469 http://www.vckbase.com/module/articleContent.php?id=470 源码基于win平台下的MFC 【名 称】: ADO 封装类. 【版 本】: 0.20 【作 者】: 成真 【E-mail】: anyou@sina.com 立即下载

相关推荐

使用Typora时LaTeX内联公式简单汇总

0、前言 在使用Typora写笔记时,有时候需要添加上LaTeX排版的公式。以下是整理出的一份简单笔记,方便记忆不清楚时查阅。笔记暂时不够完善,之后再补充。 注:有些公式语法KateX不能解析,但在Typora中可以使用(不用在意) 1、一些基本内联公式 位置关系 展示 LaTeX 说明 x2x^{2}x2 x^{2} 右上标 x2x_{2}x2​ x_{2} 右下标 2x{}^{2}x2x {}^{2}x 左上标 2x{}_{2}x2​x {}_{2}x 左下标

白白旧维的博客 4438

ADO连接数据库时EOF、BOF的意义和用法

在做学生管理的过程中,多次运用BOF和EOF,使文章的逻辑更加的鲜明,刚开始理解不是很到位、有点小偏差,随着大家的交流与学习,逐渐加强了对其的认识,接下来大家共同学习!

foreverhuylee的专栏 9333

Multisim 14.0实战:从零搭建可调幅多波形信号发生器(附仿真文件)

本文详细介绍了如何在Multisim 14.0中从零搭建一个可调幅多波形信号发生器,涵盖方波、三角波和正弦波的生成原理与实现步骤。通过核心电路架构解析、关键参数设计及Multisim实战操作,帮助电子工程学习者和硬件工程师掌握信号发生器的设计与调试技巧,并提供仿真文件供实践验证。

nokia的博客 1073

ADO数据库编程 - 总结

一、数据库操作准备 // --------------------------------------------------------------------------------------------------------------------------------- 1、导入ADO动态链接库   在工程的stdafx.h中加入如下语句:   #import "C...

weixin_30758821的博客 258

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

利用Docker Compose简化openGauss多节点容器化部署

本文详细介绍了如何利用Docker Compose简化openGauss多节点容器化部署,从环境准备到配置文件编写,再到集群部署与验证,提供了一套完整的解决方案。通过Docker Compose,原本复杂的手动部署流程被大幅简化,显著提升了部署效率和可靠性,特别适合企业级开源数据库的高可用架构需求。

weixin_30338481的博客 60

ADO数据库编程

一、数据库操作准备 1、导入ADO动态链接库    在工程的stdafx.h中加入如下语句:    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace\    rename("EOF","adoEOF")         这一语句有何作用呢?其最终作用同我们熟悉

caowei880123的专栏 1152

【YOLO部署Android安卓手机APP】YOLOv8部署到安卓实时目标检测识别——官方/自训练模型YOLOv8人脸/车辆等目标检测(可自定义更换其他目标)

本文首先讲解如何直接使用官方训练好的模型部署到手机APP进行人脸检测,然后讲解如何修改其他目标进行检测,以车辆检测为例进行讲解如何训练自己的模型部署到手机APP。本文为详细设计/配置文档,包含完整所需的环境配置搭建,项目工程配置步骤等,手把手记录使用pycharm和Android studio的工程开发过程,实现YOLO部署到安卓。实战开发,亲测无误。本项目实现了人脸检测和车辆检测,当然,以此你可以按照本项目开发步骤扩展更换为其他目标进行检测,例如更换为车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人等

嵌入式阿齐Archie 1万+

ADO的使用

(1)利用Connection对象的Execute方法执行SQL命令 Execute方法的原型如下所示: _RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是

joimson的专栏 715

问题解答:如何不通过修改底层数据库表的方式,给数据库对应的数据结构,增添新的字段?

现在需要将这张表里的内容读取到 ABAP 内表里,并且针对每个行项目,增加一个新的列字段,我随便举个例子,这个列字段名称叫 LENGTH,值为 OBJ_NAME 字段的长度,使用。最笨的办法就是下面这样定义一个新的类型,这个类型的每个字段名称,都来自数据库表 TADIR 的同名字段,在末尾再增添自定义字段 length.其实我们是做 ALV 输出,只需要 ABAP 内表变量的类型,包含 TADIR 数据库表的全部字段,再加上新的 LENGTH 字段即可。这相当于多了一个中间层,没办法直接被 ALV 处理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 481

反应堆设计:基于MATLAB的反应堆仿真和分析,包括反应堆稳态分析、反应堆动态分析和反应堆安全分析 介绍

反应堆设计是利用计算机技术对核反应堆进行设计和模拟,以获得安全、高效、经济的核能发电系统。它是核能领域的重要组成部分,在电力生产、核医学、科学研究等领域有着广泛的应用。

走向CTO的路上... 1112

孙鑫VC学习笔记:第二十讲 ado数据库编程

 数据库编程:COM[计] 小型可执行程序的扩展名, 串行通讯端口[域] Commercial organizations,商业组织,公司The Component Object Model组件对象模型ADO的三个核心对象Connection对象Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。Recordest和C

遐迩思的专栏 4655

使用 MATLAB/Simulink + Simscape Electrical 构建一个他励直流电机的启动与制动过程仿真模型

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

amy_mhd的博客 231

VC6.0中使用ADO操作Access数据库

            由于我的程序只是简单的储存网址和标题,Access小而简单,所以就选择Access作为本小软件的数据库,并采用ADO访问数据库。以下数据库内容摘自孙鑫老师的”VC20讲第20课数据库访问的PPT” 数据库访问技术 1. ODBC(Open Database Connectivity),开放数据库互连。ODBC是上个世纪八十年代末九十年代初出现的技术,它为编写

2696

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

在VC下使用ADO连接数据库编程入门

刚看了孙鑫的VC视频关于使用ADO连接数据库的那节课,发现用VC使用ADO连接数据库确实比想象中要麻烦和复杂。一来要做很多预操作,做很多初始化工作特别是对于不熟悉COM的人,例如我,来说那一堆的变量和方法,以及很多用法,简直看得一头雾水~~ 所以在这把很多入门的内容都记下来,以后可以用了~原文地址:http://www.pconline.com.cn/pcedu/emp

古的博客 980

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC用ADO连接数据库字符串有感

那天看了孙鑫老师的视频,上面有说过不用记连接字符串,装个VB就能把字符串弄出来,后来自己也学着做MFC的ActiveX,发现"Activex Control Test Container"这个VC小工具居然也能获取数据库连接字符串。但装了MySql怎么也没找到MySql的Ole DB提供程序。随便把获取过程写一下:1.VC6.0菜单Tool-->Activex Control Test

zyq5945的专栏 3225

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

孙鑫VC++第20章HOOK和数据库访问

第20章、HOOK和数据库的访问   1,  操作系统在传递消息时,将我们感兴趣的消息先传递给HOOK过程,在此函数中进行检查,然后再决定是否放行该消息;(钩子过程)   2. SetWindowsHookEx函数来安装一个钩子过程;最后安装的钩子过程总是安排在该链的前面;   2,  在钩子过程中对信息处理完成之后,如果想把信息继续传递给下一个钩子过程,可以调用CallNextHoo

C__Monkey的专栏 1539

孙鑫mfc学习笔记第二十课

第二十课 Hook编程。如何安装钩子过程,如何编写全局钩子,动态连接库里的全局变量数据共享问题分析。ADO数据库编程。在VB中利用ADO控件和ADO对象访问数据库,在VC中利用ADO技术访问数据库。 数据库访问技术 ODBC(OpenDatabaseConnectivity),开放数据库互连。ODBC是上个世纪八十年代末九十年代初出现的技术,它为编写关系数据库...

weixin_33849942的博客 159

孙鑫VC深入详解教程中ADO访问数据库中出现runtime error的问题解决

在学习过程中,遇到了如题的问题,一筹莫展中……不断地度娘,度娘~终于从csdn一贴子中获得启发!现贴出来,希望能帮到后来者:) CoInitialize(NULL); _ConnectionPtr pConn(__uuidof(Connection)); _RecordsetPtr pRst(__uuidof(Recordset)); _CommandPtr pCmd(__uuidof(

boxer的专栏 3176

孙鑫MFC笔记教程(20)(二) ADO数据库编程

数据库编程: COM [计] 小型可执行程序的扩展名, 串行通讯端口 [域] Commercial organizations,商业组织,公司 The Component Object Model组件对象模型 ADO的三个核心对象 Connection对象 Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。Recordest和Comm...

javababy1 139

使用ADO访问数据库

VB方法:1、新建exe程序2、添加控件MS ADO Data Control3、为ADO控件设置属性右击此控件,选择ADODC Properties,出现Property Page对话框General选项卡——>Use Connnection String——>单击Build出现 数据连接属性 对话框选择合适的OLE DB提供程序(我这里选择MS for SQLServer),单击下一步选中 使

流云轩 543

孙鑫 VC++ 视频教程--初学者值得一看

孙鑫C++视频教程 rmvb格式 全20CD完整版,初学者值得一看, 20CD完整版的下载如下: (注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整) 迅雷专用高速下载 孙鑫C++教程(全20讲)PPT讲义.rar 迅雷专用高速下载 孙鑫C++教程01.rar 迅雷专用高速下载 孙鑫C++教程02.rar 迅雷专用高速下载 孙鑫C++教程0

SelfRef的专栏 2343
上一篇: 孙鑫VC学习笔记:第二十讲 (一) Hook编程
下一篇: RecalcLayout的作用
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值