数据库连接技术

news2024/11/28 8:38:04
一、许多编程语言 都可以 连接数据库。不是在C++中加入SQL语句,而是使 用C++编程语言 连接数据库,并执行SQL语句,以获得数据。
数据库连接,有一些通用的方式。C++中连接数据库并执行SQL语句,主要有以下几种方式:
通用数据库连接技术:
DAO,OLE DB,ADO,ADO.NET(C++/CLI),ODBC等;
其中DAO是MFC内置的,主要用于连接Access;
OLE DB是底层连接技术,比较复杂,但很强大;
ADO对OLE DB进行了封装,调用方便,支持数据库也多;
ADO.NET主要面向.NET平台,可以使用C++/CLI调用;
ODBC是一种通用调用标准,比较普遍;
专用数据库连接技术,就相当于是数据库上为自己做的一套C++库:
比如MySQL用libmysql

以ODBC为例:
如果你要连接MSSQL,需要有MSSQL的ODBC驱动,安装MSSQL时会自动安装,然后设置数据源DSN,然后使用ODBC的通用API调用。
如果你使用VC,那么MFC有封装
代码执行次序大体为:
1.连接数据库
2.执行SQL语句
3.获取数据库返回的结果
4.用完数据库后释放数据库链接

二、OLE DB 和 ODBC的关系

由于OLEDB(支持关系/非关系型数据库) ODBC(仅支持关系型数据库)标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE DB是不是替代ODBC的新标准?答案是否定的。实际上,ODBC标准的对象是基于SQL的数据源(SQL-Based Data Source),而OLE DB的对象则是范围更为广泛的任何数据存储。从这个意义上说,符合ODBC标准的数据源符合OLE DB标准的数据存储的子集

三、OLE-DB 和 ADO的关系

OLE-DB(复杂,无法流行)=》微软对OLE-DB重新封装一次,成了ADO(实现了多种程序可以互相调,大量简化了数据存取工作)!!

由于OLE-DB太底层化,而且在使用上非常复杂,需要程序员拥有高超的技巧,因此只有少数的程序员才有办法使用OLE-DB。这让OLE-DB无法广为流行。为了解决这个问题,并且让VB和脚本语言也能够藉由OLE-DB存取各种数据源,Microsoft同样以COM技术封装OLE-DBADO对象(这一步是很重要的,实现了多种程序可以互相调,并且可以开发的语言也丰富了),简化了程序员数据存取的工作。由于 ADO成功地封装了OLE-DB大部分的功能,并且大量简化了数据存取工作,因此 ADO也逐渐被愈来愈多的程序员所接受。

四、

4.1 ODBC的由来

早期数据库访问是由本机库来执行的,例如SQL Server的DBLib以及Oracle的OCI(Oracle Call Interface,Oracle调用接口)。这样能保证快速地访问数据库,但是不同的数据库要使用不同的API来访问,导致代码通用性很差。

为了解决这个问题,1992年Microsoft和Sybase、Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库。随后ODBC便获得了许多数据库厂商和Third-Party的支持而逐渐成为标准的数据存取技术。

ODBC以当时的业界标准规范X/Open Call Level Interface(CLI)和ISO/IEC9075-3Call-LevelInterface(SQL/CLI)为涵盖的范围,因而支持了广阔的数据库。虽然ODBC在初期的版本中执行效率不佳,而且功能有限,因此也为人们所贬低。但是,随着Microsoft不断地改善ODBC,使ODBC的执行效率不断增加,ODBC驱动程序的功能也日渐齐全。到目前,ODBC已经是一个稳定并且执行效率良好的数据存取引擎。不过ODBC 仅支持关系数据库,以及传统的数据库数据类型,并且只以C/C++语言API(API就是一些C语言的代码,是最底层的程序,在windows中就是一些.dll的文件)形式提供服务,因而无法符合日渐复杂的数据存取应用,也无法让脚本语言使用。因此Microsoft除了ODBC之外,也推出了其他的数据存取技术以满足程序员不同的需要。(注:ODBC是面向过程的语言,由C语言开发出来,不能兼容多种语言,所以开发的难度大,而且只支持有限的数据库公司,对于后来的EXCEL等根本不能支持)。

尽管可以编写直接利用ODBC API的应用程序,但这是相当复杂的。为了避免这种复杂性,微软引入了两个对象模型:DAO(Data Access Object)与RDO(Remote DataObject),可以通过过程性的ODBC API实现面向对象的访问。

4.2 OLE DB的由来

随着数据源日益复杂化,现今的应用程序很可能需要从不同的数据源取得数据,加以处理,再把处理过的数据输出到另外一个数据源中。更麻烦的是这些数据源可能不是传统的关系数据库,而可能是Excel文件,Email,Internet/Intranet上的电子签名信息。Microsoft为了让应用程序能够以统一的方式存取各种不同的数据源,在1997年提出了Universal Data Access(UDA)架构。UDA以COM技术为核心,协助程序员存取企业中各类不同的数据源。UDA以OLE-DB(属于操作系统层次的软件)作为技术的骨架。OLE-DB定义了统一的COM接口作为存取各类异质数据源的标准,并且封装在一组COM对象之中。藉由OLE-DB,程序员就可以使用一致的方式来存取各种数据。但仍然OLEDB是一个低层次的,利用效率不高。

4.3 ADO的由来

虽然OLE-DB允许程序员存取各类数据,是一个非常良好的架构,但是由于OLE-DB太底层化,而且在使用上非常复杂,需要程序员拥有高超的技巧,因此只有少数的程序员才有办法使用OLE-DB。这让OLE-DB无法广为流行。为了解决这个问题,并且让VB和脚本语言也能够藉由OLE-DB存取各种数据源,Microsoft同样以COM技术封装OLE-DB为ADO对象(这一步是很重要的,实现了多种程序可以互相调,并且可以开发的语言也丰富了),简化了程序员数据存取的工作。由于 ADO成功地封装了OLE-DB大部分的功能,并且大量简化了数据存取工作,因此 ADO也逐渐被愈来愈多的程序员所接受。

=》ADO 比ODBC 更加广泛 通用!

五、

微软公司的ADO(ActiveX Data Objects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。

ADO被设计来继承微软早期的数据访问对象层,包括RDO(Remote Data Objects)和DAO(Data Access Objects)。ADO在1996年冬被发布。

ADO包括了6个类:Connection,Command,Recordset,Errors,Parameters,Fields。

说通俗点OLE DB和ODBC都是最底层的东西,而ADO对象给我们提供了一个“可视化”地和应用层直接交互的组件,我们不用过多的关注OLEDB的内部机制,只需要了解ADO通过OLE DB创建数据源的几种方法即可,就可以通过ADO轻松地获取数据源。可以说ADO是应用程序和数据底层的一个中间层,ADO对象通过OLE DB间接取得数据库中的数据。OLE DB只是提供了通向各种数据库的一个通用接口,简单的可以用图1来表示:
                               

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1146126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PLC-200 smart 字节与字

这里写自定义目录标题 数据存储器的组合——字节与字组合字与双字组合 数据存储:右侧低位,左侧高位 1输出;0不输出 v:存储区标识符 例如:VB100.0,v存储区标识符;100 字节编号;“.0”…

C语言 定义一个函数,并调用,该函数中打印显示九九乘法表

#include<stdio.h> void chengfabiao() {for (int i 1; i < 10; i){for (int j 1; j < i; j){printf("%d * %d %d\t",j,i,i*j);} printf("\n");} } int main(int argc,const char *argv[]) {chengfabiao();return 0; }

饭局从入门到精通

文章目录 你会把你妈卖到妓院吗&#xff1f;声明一 为什么要请客吃饭1 环境变化&#xff0c;身份跟着变化2 酒杯识人3 吃人嘴软 二 饭局的准备1 明确自己设饭局的目的2 掌握客人的特点3 如何设计陪客的名单 三 如何正确选择饭店1 地段选择法2 环境选择法3 菜系选择法 四 如何邀…

【AD9361 数字接口CMOS LVDSSPI】B 并行数据之CMOS

##接上一篇&#xff1b; 本节介绍 AD9361 数字接口CMOS &LVDS&SPI最后一张表中四种工作模式的具体配置及时序波形图。 目录 1、单端口半双工模式 &#xff08;CMOS&#xff09; *代称 SHC*换句话说&#xff0c;最大值是12‘b0111_1111_1111&#xff0c;即0x7FF&#xf…

IOC课程整理-5 Spring IoC 依赖查找

1 依赖查找的今世前生 2 单一类型依赖查找 3 集合类型依赖查找 4 层次性依赖查找 5 延迟依赖查找 6 依赖查找安全性对比 7 内建可查找的依赖 • AbstractApplicationContext 内建可查找的依赖 注解驱动 Spring 应用上下文内建可查找的依赖&#xff08;部分&#xff09; 8 依…

两个手机屏幕的效果对比

其中一个刚买的二手&#xff0c;卖家说坏了&#xff0c;换成国产屏&#xff0c;没有指纹。其实拿到手时&#xff0c;吾就发现屏幕明显泛白&#xff0c;颜色与手头的相差太大。 对比1 对比2

轻量级 SSO 方略

单点登录 SSO&#xff08;Single Sign On&#xff09;是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。打通所有系统的账户密码&#xff0c;只需要记住一个就行&#xff0c;而且登录一个系统后&#xff0c;打开其他系统不需要再登录。广义…

【Unity程序技巧】Input管理器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

【Python 零基础入门】常用内置函数 初探

【Python 零基础入门】内容补充 1 常用内置函数 Python 简介为什么要学习内置函数数据类型和转换int(): 转为整数float(): 转为浮点数list(): 转为列表tuple(): 转换为元组set():转换为集合dict(): 创建字典: 数学运算abs(): 绝对值pow(): 幂运算round(): 四舍五入min(): 最小值…

类与面向对象

章节目录&#xff1a; 一、面向对象二、类2.1 类定义2.2 类对象2.3 self 代表类的实例&#xff0c;而非类 三、类的方法四、多继承五、方法重写六、私有属性及私有方法七、类的专有方法八、专有方法重载九、结束语 一、面向对象 Python 从设计之初就已经是一门面向对象的语言。…

【错误解决方案】ModuleNotFoundError: No module named ‘torch._six‘

1. 错误提示 在python程序中&#xff0c;试图导入一个名为torch._six的模块&#xff0c;但Python提示找不到这个模块。 错误提示&#xff1a;ModuleNotFoundError: No module named torch._six 2. 解决方案 出现这个错误可能是因为你使用的PyTorch版本和你的代码不兼容。在某…

MySQL实战1

文章目录 主要内容一.墨西哥和美国第三高峰1.准备工作代码如下&#xff08;示例&#xff09;: 2.目标3.实现代码如下&#xff08;示例&#xff09;: 4.相似例子代码如下&#xff08;示例&#xff09;: 二.用latest_event查找当前打开的页数1.准备工作代码如下&#xff08;示例&…

nrf52832 开发板入手笔记:J-Flash 蓝牙协议栈烧写

前言 nrf52832 想要开启 蓝牙功能&#xff0c;比如蓝牙主从机功能&#xff0c;需要额外烧写 蓝牙协议栈的固件&#xff1a;softdevice&#xff0c;换句话说&#xff0c;蓝牙协议栈等代码是不开放的&#xff0c;只提供一个 二进制文件。 也就是 nrf52832 Flash 与 RAM 要分区了…

Linux学习第26天:异步通知驱动开发: 主动

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在正式开启今天的学习前&#xff0c;讲一讲为什么标题中加入了【主动】俩字。之前学习的阻塞和非阻塞IO&#xff0c;都是在被动的接受应用程序的操作。而今天的学…

MyBatis-Plus 实战教程四 idea插件

文章目录 插件功能分页插件配置分页插件分页API 通用分页实体实体开发接口改造PageQuery实体改造PageDTO实体 仓库地址 插件功能 MybatisPlus提供了很多的插件功能&#xff0c;进一步拓展其功能。目前已有的插件有&#xff1a; PaginationInnerInterceptor&#xff1a;自动分…

中微爱芯74逻辑兼容替代TI/ON/NXP工规品质型号全

这里写自定义目录标题 工业级型号全产品线概述![在这里插入图片描述](https://img-blog.csdnimg.cn/097ef810b2234f07b0c0c1e962a73761.png)批量应用行业头部客户兼容替代封装对照逻辑参数对比电平转换系列型号对照HC/HCT 系列型号对照AHC/AHCT 系列型号对照LV/LVC 系列型号对照…

【ARMv8 SIMD和浮点指令编程】NEON 通用数据处理指令——复制、反转、提取、转置...

NEON 通用数据处理指令包括以下指令(不限于): • DUP 将标量复制到向量的所有向量线。 • EXT 提取。 • REV16、REV32、REV64 反转向量中的元素。 • TBL、TBX 向量表查找。 • TRN 向量转置。 • UZP、ZIP 向量交叉存取和反向交叉存取。 1 DUP (element) 将…

无线电编码和记录和静音检测器 PlayOutONE LiveStream 5.0

直播编码器&#xff0c;随处流式传输。LiveStream 应用程序的多色图案屏幕截图&#xff0c;显示一波进入&#xff0c;四路流出来&#xff0c;LiveStream是一站式应用程序&#xff0c;可让您的电台在需要的地方输出。 对音频进行编码以进行流式传输&#xff0c;使用您最喜欢的V…

Megatron-LM GPT 源码分析(三) Pipeline Parallel分析

引言 本文接着上一篇【Megatron-LM GPT 源码分析&#xff08;二&#xff09; Sequence Parallel分析】&#xff0c;基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale &#xff0c;通过GPT的模型运行示例&#xff0c;从三个维…

【鸿蒙软件开发】ArkTS基础组件之TextClock(时间显示文本)、TextPicker(滑动选择文本)

文章目录 前言一、TextClock1.1 子组件1.2 接口参数TextClockController 1.3 属性1.4 事件1.5 示例代码 二、TextPicker2.1 子组件2.2 接口参数 2.3 属性2.4 事件2.5 示例代码 总结 前言 TextClock组件:通过文本将当前系统时间显示在设备上。支持不同时区的时间显示&#xff0…