**ODBC**（**Open Database Connectivity**，开放数据库互连）提供了一种标准的API（应用程序编程接口）方法来访问数据库管理系统（DBMS）。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持，用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性。

历史
--

在ODBC诞生之前，如果要开发数据库应用程序，则必须要使用数据库厂商随数据库产品一同发布的一些工具集来访问数据库，或者在程序中使用嵌入式SQL来访问数据库。当时，对于访问数据库的方法，缺乏一个基于C语言的统一编程接口。在这种背景下，微软于1992年发表了**ODBC**。之后，X/Open组织以及ISO标准化组织基于ODBC 3.0的规范，进一步进行了标准化，于1995年发表了SQL/CLI标准。该标准已经成为了SQL标准的一部分。

版本历史：

* ODBC 1.0：发表于1992年9月
* ODBC 2.0：发表于1994年
* ODBC 3.0：发表于1995年
* ODBC 3.5：发表于1997年
* ODBC 3.8：發表於2009年，和Windows 7一同發表
* ODBC 4.0：開發於2016年6月 ，於2017年9月發布的SQL Server 2017和2018年底的其他桌面驅動程式首次實現在Github的最終規範 （页面存档备份，存于）。

实现
--

ODBC的运用形态通常是由应用程序经过一个称之为ODBC管理器的工具，创建一个DSN，指明需要调用的ODBC驱动程序，从而访问对应的数据库。对于用户的应用程序而言，ODBC驱动程序是相对不可见的。用户只需要在ODBC管理器中配置相应的数据库的数据源信息，并登录相应的ODBC驱动程序即可。DSN分为三种：

* 用户DSN
* 系统DSN
* 文件DSN

也可以用连接字符串而不需要事先创建DSN，例如

```
connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xyz;PWD=xxx"
connstr="DRIVER={Microsoft Access Driver};SERVER=D:\abc\defg.mdb"
```

各个数据库厂商通常都为自己的数据库实现了ODBC驱动程序。从Oracle、DB2、SQL Server到Access数据库，都实现了面向各自数据库产品的数据驱动程序。

而对于ODBC管理器，目前主要存在以下几种实现：

Microsoft ODBC
微软提供的一个实现，目前在大部分Windows操作系统上可以找到它。
unixODBC
条目：unixODBC
unixODBC项目为非Windows操作系统（如各版本的Linux、Unix以及Mac OS）提供的一个实现。unixODBC的实现涵盖了ODBC 3.0中的所有API规范，并且提供了一个类似于Microsoft ODBC那样的GUI形式的配置界面供用户进行数据源的配置。unixODBC的代码在GPL协议下公开，目前该项目是由Easysoft的Nick Gorham进行管理。unixODBC现在已经是很多Linux发行版的标准安装模式下的一个必要组件。
iODBC
条目：iODBC
iODBC项目（Independent Open DataBase Connectivity）的目标是提供一个平台无关的实现，该项目目前由Openlink Software进行管理。其代码是在LGPL协议以及BSD协议下发布。苹果公司从Mac OS X v10.2时代开始，便将iODBC绑定至Mac OS操作系统中。

参考文献
----

1. ↑ . Microsoft.  [2010-01-13]. （原始内容存档于2010-01-11）. Windows 7 includes an updated version of ODBC, ODBC 3.8.
2. ↑  Rukmangathan, Krishnakumar.. Microsoft Data Access / SQL BI Technologies Blog. Microsoft. 2016-06-07  [2022-05-10]. （原始内容存档于2019-01-15）. After more than 15 years since the last release, Microsoft is looking at updating the Open Data Base Connectivity (ODBC) specification.
3. ↑ .  [2022-05-10]. （原始内容存档于2022-05-10）.

外部連結
----

* ODBC -- Open Database Connectivity概觀（页面存档备份，存于）

参见
--

* ADO（ActiveX Data Objects）
* MDAC（Microsoft Data Access Components）
* JDBC（Java Database Connectivity）


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
数据库管理系统（DBMS） |
| --- |
|  |
| 概念 | 
* 数据库
	+ 理論
* 数据模型
* 数据库存储结构（英语：）
* 关系 (数据库)
* 关系模型
* 分布式数据库
* ACID
	+ 原子性（英语：）
	+ 一致性
	+ 隔離性
	+ 持久性
* Null值
* 数据库规范化
* 數據庫完整性
* 實體完整性
* 參照完整性
* 关系数据库管理系统
* 主键
* 外键
* 代理键
* 超键
* 候选键
* 事务处理
* 增刪查改

 |
|  |
| 数据库组件 | 
* 触发器
* 视图
* 数据库表
	+ 
	+
* 指标
* 事务日志（英语：）
* 数据库事务
* Savepoint
* 并发控制
* 乐观锁
* 悲观锁
* 数据库索引
* 存储程序
* 資料庫分割（英语：）

 |
|  |
| SQL | 

|  |  |
| --- | --- |
| 分类 | 
* 数据查询语言（DQL）
* 資料定義語言（DDL）
* 資料操縱語言（DML）
* 資料控制語言（DCL）

 |
|  |
| 指令 | 
* SELECT
* INSERT
* UPDATE
* MERGE
* DELETE
* JOIN
* UNION
* CREATE
* DROP
* Begin work
* COMMIT
* ROLLBACK
* TRUNCATE
* ALTER

 |
|  |
| 安全 | 
* 
* 參數化查詢

 |

 |
|  |
| 实现 | 

|  |  |
| --- | --- |
| 类型 | 
* 关系数据库
* 面向文檔的數據庫
* 平面文件数据库
* Deductive（英语：）
* 維度化資料庫
* 階層式
* 图数据库
* NoSQL
* NewSQL
* 对象数据库
* 物件關聯式資料庫（英语：）
* Temporal
* XML資料庫（英语：）

 |
|  |
| 数据库产品 | 
* 对象型
	+ 对比
* 关系型
	+ 对比

 |
|  |
| 数据库组件 | 
* 数据查询语言
* 查詢最佳化器（英语：）
* 查詢計畫（英语：）
* 嵌入式SQL
* ORM
* LINQ
* 数据访问层
* ODBC
* OLE DB
* ADO
* ADO.NET
* JDBC
* PDO

 |

 |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| 规范控制 編輯維基數據鏈接 | 
* GND: 4396455-2

 |

 |