驱动程序管理器¶
在配置学习ODBC驱动注册和数据源配置之前,首先需要了解下操作系统的驱动程序管理器,Windows的数据源管理器和Linux下的UnixOdbc统称为驱动程序管理器,其作用就是对驱动和数据源进行管理的工具。
驱动程序管理器由四部分组成:头文件、动态库文件、配置文件、管理工具。
- 头文件:主要是包含sql.h等头文件,windows的sql.h文件在系统目录中,vs可以直接引用;Unixodbc安装后,也会将头文件拷贝到系统目录中,程序中可以直接引用;
- 动态库文件:windows下提供了odbc32.dll库;Linux下提供了libodbc.so.*库;动态库中实现了满足ODBC标准的接口,但数据源管理器提供的动态库只是实现了标准的一个壳子,最终还会去调用数据库的ODBC驱动才能与数据库交互。
- 配置文件:windows下的配置信息大部分会放在注册表中,驱动程序管理器的信息也是存储在注册表中,后续详细解决如何在windows的注册表中修改相关配置;Linux的unixodbc提供odbc.ini和odbcinst.ini文件;
- 管理工具:windows下图形化的驱动程序管理器就是一个管理器(odbcad32.exe);可以进行数据源的创建、删除和修改;Unixodbc提供了odbc_config等工具查看数据源相关配置。
对于开发者来说,主要依赖头文件、动态库和配置文件,如果在Windows下用VS编写odbc的程序,可以直接引入sql.h头文件后,就可以进行odbc编程了,不需要引入数据库的odbc库,原因就是VS默认为引入系统的odbc32.dll动态库,这里面有编程所需的所有接口,满足编译和链接的需求;而对于Linux环境下,用gcc/g++编译程序时,链入的库可以是-lodbc,这样就是链接的unixodbc提供的libodbc.so.*库,同样可以正常的编译和链接。
因此默认情况下,程序会先调用驱动程序管理器的库,然后再调用数据库的odbc库,大致流程如下:
为什么驱动程序管理器要实现ODBC标准呢,原因大致有以下几个:
1). 统一编码,由数据源管理器再去调用各个数据库厂商提供的ODBC驱动;
2). 容错处理,各个厂商提供的ODBC驱动实现的力度不同,数据源管理器可以进行预判做规避处理;甚至如果是数据库ODBC不具备的接口,数据源管理器提供的动态库就帮助我们做这些事情;
3). 编码转换:因为ODBC标准的接口分为A接口和W接口,A接口即为支持ASCII编码数据,而W支持宽字符数据。这块各个厂商提供的驱动能力不一,比如部分odbc驱动没有提供W接口,通过驱动管理器就可以实现W接口到A接口的转换,从而满足使用要求;
没有安装任何数据库驱动的情况下,也可以编写ODBC程序,不影响编译和连接,编译好的程序只要配置好对应数据库的驱动,既可正常运行!
注意
我们在编程时,也可以自行强制引入神通数据库的ODBC,这样就不用调用odbc32.dll或者libodbc.so.*。