百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

微软数据库访问接口(ODBC,OLEDB,ADO)

mhr18 2024-12-25 10:36 11 浏览 0 评论

微软数据库访问接口(ODBC,OLEDB,ADO)

目录

  • 数据库访问接口发展历史
  • ODBC、OLEDB和ADO之间的关系
  • VB脚本下的数据库接口代码示例OLEDB连接ODBC连接执行SQL语句游标操作读取数据添加数据修改数据常用属性关闭连接
  • 在SQL Server中通过链接服务器查询OLE DB数据源
  • 在SQL Server中直接查询OLE DB数据源

微软数据库访问接口发展历史

ODBC历史

ODBC(Open Database Connectivity,开放数据库互连)。要了解ODBC是什么,先了解一下数据库连接的相关知识。在最开始连接数据库时,由于数据库种类繁多,各种数据库连接有不同的需求,这个时期,数据库连接主要依靠各种API函数来进行连接。在这种背景下,微软于1992年发表了ODBC, ODBC就是将这些API函数封装起来形成统一的接口。当SQL语句进入接口后,驱动器管理程序将它们送入对应的驱动器(driver),由驱动器将SQL语句送入各种不同的数据库。

OLE DB历史

OLE DB(Object Linking and Embedding, Database,对象链接嵌入数据库)是微软为以统一方式访问不同类型的数据存储设计的一种应用程序接口。OLE DB 是建立在 ODBC 功能之上的一个开放规范。ODBC 是为访问关系型数据库而专门开发的,OLE DB 则用于访问关系型和非关系型信息源。OLE DB可以通过ODBC连接到数据库,也可以直接连接到数据库,并且直接连接的访问速度更快。可以知道,只要支持ODBC的数据源是一定能够支持OLEDB的,但是反过来则不一定。

ADO历史

ADO(ActiveX Data Objects,ActiveX 数据对象)在1996年8月与OLE DB一起被发布,是在OLE DB上面创建的一个新的统一的数据访问的高层对象模型。ADO推出后顺利的取代了微软早期的数据访问对象层(包括RDO(Remote Data Objects)和DAO(Data Access Objects))。ADO将OLE DB的对象模型进一步简化,由数据库厂商开发满足OLE DB接口的数据提供者(data provider),而ADO本身则是与数据源无关(data source independent)的对象结构,这使得ADO通用性极好。

ODBC、OLEDB和ADO之间的关系

VB脚本下的数据库接口代码示例

OLEDB连接

标准安全模式(Standard Security)


1

2

3

4

dim conn, sCon

set conn=server.CreateObject("ADODB.Connection")

sCon="Provider=SQLOLEDB;Data Source=(local); Initial Catalog =dbname;User ID=sa;Password=123"

conn.open(sCon)


信任连接(Trusted connection)


1

2

3

4

dim conn, sCon

set conn=server.CreateObject("ADODB.Connection")

sCon="Provider=SQLOLEDB; Integrated Security=SSPI; Persist Security Info=False;Data Source=(local); Initial Catalog =dbname"

conn.open(sCon)


ODBC连接

通过系统数据源(System?DSN)连接

先注册数据源:DSN。打开管理工具 -> 数据源(ODBC) -> 打开系统DSN选项卡 -> 单击添加按钮 -> 从列表中选择SQL Server,单击完成 -> 在名称中输入数据库名称,在你想连接的SQL Server服务器中输入(local)-> 按向导提示完成。


1

2

3

4

dim conn, sCon

set conn=server.CreateObject("ADODB.Connection")

sCon="DSN=注册名;Uid=sa;Pwd=123"

conn.open(sCon)


通过ODBC驱动程序连接


1

2

3

4

dim conn, sCon

set conn=server.CreateObject("ADODB.Connection")

sCon="Driver={SQL Server};Server=(local); Uid=sa;Pwd=123;Database=dbname"

conn.open(sCon)


执行SQL语句


1

2

3

4

Dim Sql, rs

Sql = "Select * From tablename"

Set rs = CreateObject("ADODB.Recordset")

rs.Open sSql,conn,2,3


rs.Open的参数如下:

  • Source:有效的命令对象、SQL语句、表名、存储过程调用、URL 或包含持久存储的记录集的文件或流对象的名称。
  • ActiveConnection:有效的连接对象变量,或包含ConnectionString参数的字符串。
  • CursorType:可选。一个CursorTypeEnum值,确定提供程序在打开记录集时应使用的游标类型。默认值为adOpenForwardOnly。
  • LockType:可选。LockTypeEnum值,用于确定提供程序在打开记录集 时应使用的(并发)类型。默认值为adLockReadOnly。


LockTypeEnum


常量

说明


adLockBatchOptimistic

4

执行多行批处理更新时使用这种类型。


adLockOptimistic

3

乐观锁定,仅在调用Update方法时锁定。


adLockPessimistic

2

悲观锁定,当记录集打开的时候将其锁定。


adLockReadOnly

1

默认,用来打开只读记录。


adLockUnspecified

-1

不指定锁的类型。



游标操作

1

2

3

4

rs.MoveFirst '把记录指针移动到第一条记录。

rs.MoveLast '把记录指针移动到最后一条记录。

rs.MoveNext '把记录指针移动到下一条记录。

rs.MovePrevious '把记录指针移动到上一条记录。

读取数据 

读取当前游标指示的行。 

1

2

dim value

value = rs("Field1")


添加数据

1

2

3

4

5

rs.AddNew

rs("Field1")=Value1

rs("Field2")=Value2

rs("Field3")=Value3

rs.update

修改数据

修改当前游标指示的行。

1

2

3

rs("Field1")=Value1

rs("Field2")=Value2

rs.update

常用属性

1

2

3

4

rs.Fields.Count '字段数量

rs.RecordCount '数据集行数

rs.BOF '如果当前的记录位置在第一条记录之前,则返回 true,否则返回 fasle。

rs.EOF '如果当前记录的位置在最后的记录之后,则返回 true,否则返回 fasle。

关闭连接

执行了select语句后Recordset会处在打开状态,其他执行其他SQL语句的Recordset未处在打开状态,不需要关闭。

在VBS中,离开对象作用域后会自动关闭。

1

2

3

4

rs.Close

set rs=Nothing

conn.Close

set conn=Nothing

在SQL Server中通过链接服务器查询OLE DB数据源

创建链接服务器

配置链接服务器使SQL Server数据库引擎能够访问SQL Server实例之外的OLE DB数据源。

在SQL Server Management Studio中,打开对象资源管理器,展开“服务器对象”,右键单击“链接服务器”,然后单击“新建链接服务器”。

在“常规”页中,“链接服务器”一栏中为链接服务器命名,并填入其他信息。

对链接数据库查询

在指定的链接服务器上执行传递查询。语法如下 :

OPENQUERY ( linked_server ,'query' )

参数:

  • linked_server:表示链接服务器名称的标识符。
  • ' query ':在链接服务器中执行的查询字符串。该字符串的最大长度为 8 KB。

OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名

SELECT * FROM OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

在SQL Server中直接查询OLE DB数据源

通过OPENDATASOURCE()函数直接查询OLE DB数据源,语法如下:

OPENDATASOURCE ( 'provider_name', 'init_string' )

示例如下:

SELECT GroupName, Name, DepartmentID

FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2016;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department

ORDER BY GroupName, Name;

版权声明:本文原创发表于博客园,作者为星墨 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文连接,否则视为侵权。

相关推荐

Spring Boot3 连接 Redis 竟有这么多实用方式

各位互联网大厂的后端开发精英们,在日常开发中,想必大家都面临过系统性能优化的挑战。当系统数据量逐渐增大、并发请求不断增多时,如何提升系统的响应速度和稳定性,成为了我们必须攻克的难题。而Redis,这...

隧道 ssh -L 命令总结 和 windows端口转发配置

摘要:隧道ssh-L命令总结和windows端口转发配置关键词:隧道、ssh-L、端口转发、网络映射整体说明最近在项目中,因为内网的安全密级比较高,只能有一台机器连接内网数据库,推送...

火爆BOOS直聘的13个大厂Java社招面经(5年经验)助你狂拿offer

火爆BOOS直聘的13个大厂Java社招面经(5年经验)助你狂拿offer综上所述,面试遇到的所有问题,整理成了一份文档,希望大家能够喜欢!!Java面试题分享(Java中高级核心知识全面解析)一、J...

「第五期」游服务器一二三面 秋招 米哈游

一面下午2点,35分钟golang内存模型golang并发模型golanggc原理过程channel用途,原理redis数据结构,底层实现跳跃表查询插入复杂度进程,线程,协程kill原理除了kil...

RMQ——支持合并和优先级的消息队列

业务背景在一个项目中需要实现一个功能,商品价格发生变化时将商品价格打印在商品主图上面,那么需要在价格发生变动的时候触发合成一张带价格的图片,每一次触发合图时计算价格都是获取当前最新的价格。上游价格变化...

Redis 中的 zset 为什么要用跳跃表,而不是B+ Tree 呢?

Redis中的有序集合使用的是一种叫做跳跃表(SkipList)的数据结构来实现,而不是使用B+Tree。本文将介绍为什么Redis中使用跳跃表来实现有序集合,而不是B+Tree,并且探讨跳跃表...

一文让你彻底搞懂 WebSocket 的原理

作者:木木匠转发链接:https://juejin.im/post/5c693a4f51882561fb1db0ff一、概述上一篇文章《图文深入http三次握手核心问题【思维导图】》我们分析了简单的一...

Redis与Java整合的最佳实践

Redis与Java整合的最佳实践在这个数字化时代,数据处理速度决定了企业的竞争力。Redis作为一款高性能的内存数据库,以其卓越的速度和丰富的数据结构,成为Java开发者的重要伙伴。本文将带你深入了...

Docker与Redis:轻松部署和管理你的Redis实例

在高速发展的云计算时代,应用程序的部署和管理变得越来越复杂。面对各种操作系统、依赖库和环境差异,开发者常常陷入“在我机器上能跑”的泥潭。然而,容器化技术的兴起,尤其是Docker的普及,彻底改变了这一...

Java开发中的缓存策略:让程序飞得更快

Java开发中的缓存策略:让程序飞得更快缓存是什么?首先,让我们来聊聊什么是缓存。简单来说,缓存是一种存储机制,它将数据保存在更快速的存储介质中,以便后续使用时能够更快地访问。比如,当你打开一个网页时...

国庆临近,字节后端开发3+4面,终于拿到秋招第一个offer

字节跳动,先面了data部门,3面技术面之后hr说需要实习转正,拒绝,之后另一个部门捞起,四面技术面,已oc分享面经,希望对大家有所帮助,秋招顺利在文末分享了我为金九银十准备的备战资源库,包含了源码笔...

“快”就一个字!Redis凭什么能让你的APP快到飞起?

咱们今天就来聊一个字——“快”!在这个信息爆炸、耐心越来越稀缺的时代,谁不希望自己手机里的APP点一下“嗖”就打开,刷一下“唰”就更新?谁要是敢让咱用户盯着个小圈圈干等,那简直就是在“劝退”!而说到让...

双十一秒杀,为何总能抢到?Redis功不可没!

一年一度的双十一“剁手节”,那场面,简直比春运抢票还刺激!零点的钟声一敲响,亿万个手指头在屏幕上疯狂戳戳戳,眼睛瞪得像铜铃,就为了抢到那个心心念念的半价商品、限量版宝贝。你有没有发现一个奇怪的现象?明...

后端开发必看!为什么说Redis是天然的幂等性?

你在做后端开发的时候,有没有遇到过这样的困扰:高并发场景下,同一个操作重复执行多次,导致数据混乱、业务逻辑出错?别担心,很多同行都踩过这个坑。某电商平台就曾因订单创建接口在高并发时不具备幂等性,用户多...

开发一个app需要哪些技术和工具

APP开发需要一系列技术和工具的支持,以下是对这些技术的清晰归纳和分点表示:一、前端开发技术HTML用于构建页面结构。CSS用于样式设计和布局。JavaScript用于页面交互和逻辑处理。React...

取消回复欢迎 发表评论: