• ODBC

    Open Database Connectivity开放数据库互连维基百科)提供了一种标准的API方法来访问数据库管理系统(DBMS)。

    这些API利用SQL来完成大部分任务。

    微软于1992.9发表,为解决异构数据库间的数据共享而产生。

    WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分(百度百科)。

  • ODBC实现过程

    ODBC 主要由驱动程序驱动程序管理器组成。

    • 驱动程序是一个用以支持ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC 管理程序设定的与相应数据库系统对应的别名即可。
    • 驱动程序管理器可链接到所有ODBC 应用程序中,它负责管理应用程序中ODBC 函数与DLL 中函数的绑定。

    ODBC的运用形态通常是由应用程序经过一个称之为ODBC管理器的工具,创建一个DSN,指明需要调用的ODBC驱动程序,从而访问对应的数据库。

    对于用户的应用程序而言,ODBC驱动程序是相对不可见的,用户只需要在ODBC管理器中配置相应的数据库的数据源信息,并登录相应的ODBC驱动程序即可。

    应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源(包括三种类型);

    管理器根据数据源提供的数据库位置、类型以及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。

    只要应用程序数据源名DSN)提供给***ODBC***,ODBC就能建立起与相应数据库的连接。

    其中涉及到几个概念:ODBC管理器、DSN、ODBC驱动

  • ODBC(驱动)管理器

    主要有几种实现:

    1. Microsoft ODBC

      微软提供的一个实现,大部分Windows系统上可以找到。

      https://img-blog.csdn.net/20150814093502653?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    2. unixODBC

      Windows(Linux、Unix、Mac OS)下的一个实现,涵盖了ODBC 3.0的所有API规范。

      提供了类似MicroSoft ODBC那样的GUI配置界面。

      unixODBC现在已经是很多Linux发行版的标准安装模式下的一个必要组件。

    3. iODBC

      iODBC项目(Independent Open DataBase Connectivity)的目标是提供一个平台无关的实现。

      苹果公司从Mac OS X v10.2时代开始,便将iODBC绑定至Mac OS操作系统中。

  • ODBC驱动

    各个数据库厂商通常都为自己的数据库实现了ODBC驱动程序。

  • DSN

    DSN(Data Source Name,数据源名称),是应用程序用来请求连接到ODBC数据源的名称。

    DSN是一种数据结构,包含有关打开数据库连接驱动程序连接到数据库所需的特定数据库信息:数据库名称、 目录、 数据库驱动程序,用户 Id,密码等。

    DSN存储在注册表中或作为单独的文本文件存储。

    分为三种:

    1. 用户DSN

      会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用。

    2. 系统DSN

      同样将有关的配置信息保存在系统注册表中,但是与用户DSN不同的是系统DSN允许所有登录服务器的用户使用。

    3. 文件DSN

      把具体的配置信息保存在硬盘上的某个具体文件(.dsn)中。

      文件DSN允许所有登录服务器的用户使用,而且即使在没有任何用户登录的情况下,也可以提供对数据库DSN的访问支持。此外,因为文件DSN被保存在硬盘文件里,所以可以方便地复制到其它机器中(文件可以在网络范围内共享)。这样,用户可以不对系统注册表进行任何改动就可直接使用在其它机器上创建的DSN。用户DSN和系统DSN的区别在于,用户DSN保存在注册表的HKEY_CURRENT_USER下,而系统DSN保存在HKEY_LOCAL_MACHINE下。

    个人认识,ODBC管理器是一个中转站,用同一套API连接到不同的数据库中,这样应用程序使用这一套API就能连接各种不同的数据库。

    相当于每个数据库在这个ODBC管理器中进行了一个变身得到一个新身份DSN,应用程序通过变身后的新身份DSN找到具体的数据库。

    ODBC API并不直接访问数据库,而是通过驱动程序管理器与数据库交互。

  • Reference

  1. ODBC API开发教程
  2. Microsoft ODBC Driver for SQL Server
  3. 百度百科
  4. 维基百科
  5. [数据库]——ODBC数据源管理器 和 三种DSN(还记得是自己用过吗?)
  6. [数据库]——对于ODBC,OLEDB和ADO目前理解
  7. DSN是什么
  8. ODBC是什么?ODBC有什么用?
  9. Linux/Unix下ODBC的安装、配置与编程

理解ODBC:DSN、ODBC管理器、驱动程序相关推荐

  1. System.Data.Odbc.OdbcException: ERROR [IM001] [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能

    System.Data.Odbc.OdbcException: ERROR [IM001] [Microsoft][ODBC 驱动程序管理器] 驱动程序不支持此功能 出现这个原因是因为vfpodbc. ...

  2. python上下文管理关键字_理解 Python 的上下文管理器

    任何 Python 教程,必然会讲解如何打开一个文件.而任何提到打开文件的地方,都必然会推荐用 with 来操作文件的读写.比如说这里有一篇非常优秀的教程,文中提到在 Python 中,文件读写是通过 ...

  3. ODBC管理器相关知识汇总

    ODBC管理器相关知识汇总 最近,在使用终端应用程序调用数据库文件时,发生了:ODBC问题之驱动程序和应用程序之间的体系结构不匹配等问题,通过查阅资料,小有收获,汇总如下: ODBC:开放数据库互连, ...

  4. ssms 连接 ssis_SSIS连接管理器:OLE DB,ODBC,ADO.NET

    ssms 连接 ssis In this article, I will first give an overview of the OLE DB, ODBC, and ADO.NET SSIS co ...

  5. [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

    网页显示的出错内容: Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005' [Microsoft][ODBC 驱动程序管理器] 在指定的 D ...

  6. ODBC 驱动程序管理器 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 解决方案

    ODBC 驱动程序管理器 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 解决方案 参考文章: (1)ODBC 驱动程序管理器 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹 ...

  7. odbc java 驱动程序_java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...

    今天把sql server 2008 r2装了起来,64位的,然后就迫不及待地体验连接数据库的操作,编程语言是java.我一开始学了一种非常老的连接方式,使用JDBC-ODBC桥.初次使用不太熟练,所 ...

  8. Qt程序连接Access数据库,出现“[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect“错误的解决办法

    Qt程序连接Access数据库,出现 1."[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect&q ...

  9. python连接sqlServer,报错:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

    1. 在jupyter notebook连接sqlServer报错 报错信息:InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC 驱动程序管理器] ...

最新文章

  1. pandas筛选dataframe列名称中包含特定字符串的数据列(select columns contains specifiec substring in dataframe)
  2. vue transition动画
  3. 主分支和'起源/主人'有分歧,如何'疏远'分支'?
  4. 小程序中自定义头部标题栏
  5. linux基本网络IP自动、手动配置
  6. arraylist 初始化_Java二维数组和动态数组ArrayList 类
  7. c语言字符串的计算方法
  8. Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法
  9. 安装win10和Linux双系统的个人经验
  10. java局部内部类 final_Java的局部内部类以及final类型的参数和变量
  11. 简述局域网与分布式系统异同点
  12. PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中
  13. mvc html绑定变量,c# – Asp.Net MVC 3使用变量对象进行自定义模型绑定
  14. 计算机基础应用课件,中职计算机应用基础课件
  15. 分享WEB快速开发工具
  16. DNS介绍,哪个好,速度快稳定
  17. python余弦函数_Python cos() 函数
  18. Python自动化测试框架,谁才是你的唯一?
  19. 【转帖】1588介绍
  20. Lombok插件之简介、IDEA集成、注解使用

热门文章

  1. 1道动态规划(搬箱子)、KMP算法、图(Prim算法)、1道哈夫曼树
  2. 0-1背包问题及变种
  3. 趣味博弈论 -- 阶梯博弈
  4. xcode如何在一个项目中建多个C程序
  5. 调用MapReduce进行词频统计
  6. vue3 引用vue-ueditor-wrap中百度编辑器ueditor实例,字数统计
  7. 协议栈植入芯片势在必行,IPSec就是个错误
  8. 马云宣布传承计划,回归教育
  9. 数据上传虚拟服务器,如何上传数据到虚拟主机
  10. 数据库:delete 删除语句