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

我的大学--孙鑫MFC笔记教程 孙鑫MFC笔记教程(1)--Windows程序的内部运行原理   源文档 http://blog.csdn.net/liufei_learning/archive/2010/09/02/5859925.aspx> 孙鑫MFC笔记教程(2)--C++经典语法与应用 阅读详情
数据库编程:
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++深入详解学习笔记 <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 阅读详情

相关推荐

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

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

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

foreverhuylee的专栏 9335

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1908

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

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

梦想---软件设计师 4150

SAP BAPI调用避坑指南:处理MD61/MD62计划独立需求时,这些参数和返回值你必须检查

本文详细解析了SAP BAPI调用中处理MD61/MD62计划独立需求的关键参数和返回值检查要点,包括版本控制、日期类型和删除标记等核心参数设置,以及常见错误排查和高级调试技巧,帮助开发者高效管理需求计划数据。

weixin_30316097的博客 612

从理论到实践:TRL去嵌入校准在国产矢量网络分析仪上的应用全解析

本文全面解析了TRL去嵌入校准技术在国产矢量网络分析仪上的应用实践,从核心算法到工程实现。详细介绍了TRL校准的数学原理、国产VNA的程控接口开发、校准件质量评估及测量不确定度控制策略,帮助工程师掌握高频器件测量的关键技术。

tech5的博客 1014

ADO数据库编程 - 总结

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

weixin_30758821的博客 259

Office Tool Plus:正版Office干净部署指南

Office部署是Windows新机配置的关键环节,涉及版本选择、架构匹配、语言支持与合规激活等基础技术问题。其核心原理基于微软官方Office Deployment Tool(ODT)的声明式XML配置机制,通过标准化流程确保安装可复现、可审计、无第三方捆绑。技术价值在于规避官网安装器的版本锁定、架构误配和语言缺失等常见风险,提升部署稳定性与安全性。典型应用场景包括企业批量部署、IT运维标准化、隐私敏感型用户自主安装。本文以Office Tool Plus为实践载体,深入解析ODT底层逻辑、XML配置规范

1189

ADO数据库编程

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

caowei880123的专栏 1152

西门子S7-200 SMART PLC高速计数器与增量式编码器实战配置指南

在工业自动化控制系统中,传感器是将物理量转换为电信号的关键组件,其中编码器作为核心的位置与速度检测元件,其工作原理基于光电或磁电效应,将机械位移转换为脉冲序列。增量式编码器通过输出相位差90度的A/B两相脉冲,不仅能实现精确的位移测量,还能通过相位关系自动判别运动方向,并通过倍频技术提升分辨率。其技术价值在于为PLC等控制器提供了实时、高精度的位置反馈,是实现闭环控制、提升系统精度与可靠性的基础。在包装机械、物料输送、绕线设备等应用场景中,编码器与PLC高速计数器的协同工作是实现精确定位、定长切割与速度控制

weixin_29178069的博客 396

torch.nn.rnn实现循环神经网络

------------------------------------nn.rnn模型实现。#------------------------------------模型实现。#-----------------------------------训练模型。#-----------------------------------训练模型。#--------------------------------读取数据。实现循环神经网络,并在至少一个数据集上进行实验,从训练时间、预测精度、...

matlab_python22的博客 2973

ADO的使用

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

joimson的专栏 715

5.4 GTT BO的内存分配分析

本文分析了AMD GPU驱动中的GTT技术实现。GTT作为GPU页表,负责管理主机内存与GPU虚拟地址的映射,支持大容量内存访问和统一寻址。文章详细介绍了GTT的核心数据结构amdgpu_gtt_mgr、初始化流程,以及BO(Buffer Object)创建时GTT区间的分配与释放机制。GTT管理通过TTM框架实现分层设计,提供内存统计、兼容性检查等接口,并支持动态迁移、多进程隔离等高级特性。该机制为AMD GPU提供了高效灵活的内存管理基础。

图形/计算GPU的驱动与虚拟化技术分享园地 3738

孙鑫MFC学习笔记-22 数据库编程

22 数据库编程22.1数据库访问技术 22.1数据库访问技术 微软提供了标准的访问数据库接口: 1.ODBC(Open Database Connectivity),开放数据库互连。它为编写关系数据库的客户软件提供了一种统一的接口。ODBC提供一个单一的API,可用于处理不同数据库的客户应用程序。使用ODBC API的应用程序可以与任何具有ODBC驱动程序的关系数据库进行通信。面向C/C++开发人员。 2.DAO(Data Access Object),数据访问对象。它是微软提供给Visual Basi

qingwufeyang的博客 351

选课系统进不去?我用 Python 做了个“捡漏挂机”脚本,全自动监控空余名额

频率控制:脚本请求频率不要太高(建议间隔 3-5 秒以上),否则可能被教务系统封 IP,甚至会被教务处请喝茶。仅供学习:本文旨在通过选课场景教学requests和网络抓包原理,请勿用于非法用途或破坏公平性。刷新页面 -> 等待加载 -> 用眼睛看人数 -> 没满?-> 点击选课 -> 确认这个流程最大的瓶颈在于**“等待加载”和“人的反应时间”**。网页加载需要渲染 HTML、CSS、图片,而 Python 脚本只需要请求一个微小的 JSON 数据接口,速度是浏览器的10 倍以上。fill:#333;

BUG猿的博客 293

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

资源分享-孙鑫VC++视频教程 rmvb格式 全20CD完整版

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整)

牧西凉的博客 7519

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

SelfRef的专栏 2343

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

孙鑫 VC++深入详解——学习笔记

第1课 Windows程序内部运行机制 1.MFC生成的C++ 源文件中都有 StdAfx.h,此文件包含了常用的AFX函数的声明,其中有 afxwin.h,此文件包含了CRECT,CPoint, CWnd等许多类及其方法的声明。 2.Project->Setting->Debug 可以加入命令行参数。 3.在SDK 中要加入 "windows.h"和stdio.h 。因为Loa

码熊之家 1万+

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

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

遐迩思的专栏 4655

孙鑫C++学习笔记

孙鑫视频VC++深入详解学习笔记    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesson5: 文本编程 Lesson6: 菜单编程 Lesson7: 对话框编程 Lesson9: 定制应用程

相见不如怀念 8330

孙鑫mfc学习笔记第二十课

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

weixin_33849942的博客 159

孙鑫C++视频教程 rmvb格式 全20CD完整版 精品分享

(注意以下为FTP下载地址,建议使用迅雷等下载工具下载,全20CD,已添加完整) 迅雷下载:孙鑫C++教程(全20讲)PPT讲义.rar迅雷下载:孙鑫C++教程01.rar迅雷下载:孙鑫C++教程02.rar迅雷下载:孙鑫C++教程03.rar迅雷下载:孙鑫C++教程04.rar迅雷下载:孙鑫C++教程05.rar迅雷下载:孙鑫C++教程06.rar迅雷下载:孙鑫...

weixin_30715523的博客 98
上一篇: 回溯法介绍
下一篇: 汇编一日一学(2)--两个数的和(DUP,堆栈段)
liufei_learning
博客等级 码龄17年 821粉丝 145原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值