ODBC的基础架构

*) 基本概念:
1. 应用程序(Application)
2. ODBC驱动管理器(ODBC Driver Manager)
  负责管理应用程序和驱动程序间的通信,主要功能包括:解析DSN (数据源名称,ODBC的数据源名称在ODBC.INI文件中配置),加载和卸载驱动程序,处理ODBC调用,将其传递给驱动程序.
3. ODBC驱动(ODBC Driver)
  实现ODBC API所提供的功能,它负责处理ODBC函数调用,将SQL请求提交给具体的数据库服务器,并将结果返回给应用程序.
4. ODBC数据源管理器 (ODBC Administrator)
  用于配置具体ODBC驱动的数据源信息
5. DSN (Data Source Name)

*) 应用阶段的基础架构
1. 以mysql-odbc为例, 具体阐释ODBC在应用层的一个架构
 如下为linux版的应用层架构

2. 以下为windows版的应用层架构

 

  两者的主要区别在于, linux主要采用odbc.ini和odbcinst.ini来管理数据源和驱动类型, 而windows则采用注册表(registry)的方式来存储.

*) 安装的基础架构
linux版
  linux版的驱动管理器它并不是系统的一部分, 需要用户自己编译安装unixODBC, 其数据源的配置管理需要用户自己去配置odbc.ini, odbcinst.ini.
odbcinst.ini的配置一般如下:

1
2
3
4
[mysql]
Driver=/usr/local/lib/libmyodbc5.so
SETUP=/usr/local/lib/libmyodbc5.so
UsageCount=1

windows版
  windows的驱动管理器由系统自带. 具体的驱动安装程序, 则由两个dll组成, 一个为具体的driver dll, driver是会被驱动管理器加载, 并作应用程序和后端具体数据库进行数据交互的桥梁, 另一个为setup dll, 这个dll的主要作用是用于配置数据源信息.
  以mysql为例, mysql-connector/odbc安装之后:
  (1). 在安装路径下C:\Program Files\MySQL\Connector ODBC 5.3目录下, 能发现myodbc5w.dll (driver dll), myodbc5S.dll (setup dll),
  (2). 同时在HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI目录项下写入如下具体信息

  Driver键对应myodbc5w.dll, Setup键对应myodbc5S.dll的绝对路径信息.

*) 数据源配置的基础架构
linux版
  以mysql为例, 需要编辑odbc.ini文件

1
2
3
4
5
6
7
8
9
10
11
12
13
[ODBC Data Sources]
myodbc      = MyODBC 2.50 Driver DSN
 
[myodbc]
Driver       = /usr/local/lib/libmyodbc.so
Description  = MyODBC 2.50 Driver DSN
SERVER       = localhost
PORT         = 3306
USER         = root
Password     = 123456
Database     = test
OPTION       = 3
SOCKET       =

windows版
  启用odbc数据源配置器, 其读取数据源驱动类型, 用户可以选择系统/用户/文件DSN. 当选择具体的驱动和DSN类型之后, odbc数据源配置管理器会依据选择的ODBC驱动, 会加载对应的setup dll(动态链接库), 打开具体的图形配置窗口, 当用户可视化配置好相关的参数后, 该setup dll会把相关信息写入到注册表中(实现了ODBC规范中的ConfigDSN).
  在注册表的HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI的目录项中, 写入如下信息.

 

*) 总结
  知道odbc的组成/安装/配置/运行时的架构之后, 对odbc整个会有更深入的理解, 能理解odbc整个体系是如何运行起来的, 同时为具体编写某个odbc driver实现提供了理论基础.

*) 参考资料:
  www.cnblogs.com/linmzh/archive/2012/10/19/2730579.html

 

 

 

 

posted on   mumuxinfei  阅读(3645)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示