ODBC管理器相关知识汇总

ODBC管理器相关知识汇总

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

  • ODBC:开放数据库互连,Open Database Connectivity,是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
  •  DSN:DSNDataSourceName数据来源名称)有三个分别的数据来源:
     
    用户DSN,是只对建立它的用户可用(是你的数据库的名字,随你便?……)

系统DSN 是建立一个系统级的DSN,就是对该系统的所有登录用户可用(是连接的数据库类型,如sql server,access?)

文件DSN 是建立一个 DSN 的文件, 信息存在文件里

  • 驱动程序:也是一个动态连接链接库文件,支持 ODBC 的应用程序(如 Excel)可以用它来访问 ODBC 数据源。每个 ODBC 驱动程序针对一个数据库管理系统 (DBMS),如 SQL Server、Access 等等。当应用程序呼叫ODBC函数,SQLConnect 或SQLDriverConnect时,驱动管理器就会加载相对的驱动程序与应用程序呼应。驱动程序主要是执行ODBC之相对函数,并与对应的数据源(Data Source)做沟通。驱动程序之工作如下:
    1. Establishes a connect to a data source.
    2. Submits requests to a data sources.
    3. Translates data to or from other formats,if requested by the application.
    4. Return results to the application.
    5. Formats errors into standard error codes and returns them to the application.
    6. Declares and manipulates cursors if necessary (invisible to the application).
    7. Initiates transactions if the data source requires explicit transaction initiation(invisible to the app).


ODBC管理器相关知识汇总

1、检查ODBC中安装的各种驱动程序的版本(非指ODBC版本!)

计算机可能包含来自 Microsoft 或其他公司的多种 ODBC 驱动程序,使用 Windows ODBC 数据源管理器可以查看已安装的驱动程序的版本。在 ODBC 数据源管理器——“驱动程序”选项卡——“版本”列。
如:检查 ODBC SQL Server 驱动程序版本(32 位 ODBC),有关 Microsoft SQL Server 项的信息显示在“版本”列中。
2、关于ODBC版本(位数)问题:
ODBC版本有32位和64位区别,要想调用不同版本的ODBC以在不同的数据源、终端应用程序之间建立通讯,必须需要 明确不同版本相应ODBC文件所在路径,以启动不同位数的ODBC程序
64位版的位置:C:\windows\system32\odbcad32.exe
32位版的位置:C:\windows\sysWOW64\odbcad32.exe

控制面板\所有控制面板项\管理工具
ODBC管理器相关知识汇总

32位ODBC一般对应于WIN2000/XP/2003等系统;如果在这些Vista、Windows7、windows8等64位系统中使用32位老版本系统的 ODBC驱动就会出现问题!!!——也就是说 ODBC版本必须匹配同版本的ODBC驱动才能正常的使用数据库?
如果你装的是 WINDOWS的64位系统,在控制面板->管理工具中打开的ODBC管理器也是64位的管理器。控制面板中的——管理工具——数据源(ODBC),如果 WIN系统是64位的,这个ODBC 默认指向的是64位版ODBC的位置,即:C:\windows\system32\odbcad32.exe。
如果你装的ODBC驱动是32位的,则在控制面板->管理工具中打开的ODBC管理器中是看不到你安装的驱动的。32位ODBC管理器在系统中的位置:WIN7: C:\Windows\ SysWOW64\odbcad32.exe,可在此管理32位的ODBC驱动。(64位WINDOWS系统创建32位ODBC的方法,如:win7 64位安装32位oracle的ODBC配置的问题,只有用32位的ODBC才可以啊。)
当然,也可在cmd命令框中输入odbcad32命令,直接调出默认的ODBC程序。
WoW64: (Windows 32-bits on Windows 64-bit)是一个Windows操作系统的子系统,能够运行32-bit 应用,并且在所有的64-bit 版本的windows上都存在。

WOW64 支持:

WOW64(Windows 64 位上的 Windows 32 位)是 Windows 64 位版本中的一项功能,使用该功能可以在 32 位模式下本机运行 32 位应用程序。 尽管基础操作系统是 64 位操作系统,但应用程序以 32 位模式工作。 SQL Server 2016 安装不支持 WOW64。 但是,WOW64 支持管理工具。

WoW64被设计用来处理许多在32-bit Windows 和64-bit Windows之间的不同, 尤其是在Windows自身的结构变化上的不同。
WoW64子系统是一个轻量级的compatibility layer, 在所有版本的windows上都拥有同样的接口. 它的主要目的是用来创建32-bit环境, 为了让32位的应用程序可以不经过任何修改就运行在64-bit的系统上, 它提供了必须的接口.
Wow64. dll是Windows NT kernel的核心接口, 在32位和64位调用之间进行转换, 包括指针和调用栈的操控. Wow64win.dll 为32位应用程序提供合适的入口指针. Wow64cpu.dll 负责将处理器在32位和64位的模式之间转换。
技术上说, WOW64是由三个 DLL实现的.
配置odbc源,这里需要注意一个问题
由于程序是32位的所以应该配置32位的odbc源
运行程序:C:\Windows\SysWOW64\odbcad32.exe
对于64位的程序则配置64位的odbc源,位置在C:\Windows\System32\odbcad32.exe
 
3、数据连接的各软件之间通讯必须位数一致问题
终端应用程序——ODBC——ODBC驱动程序——数据源(数据库)程序
建立通讯最终目的,终端应用要调用数据源所提供的数据资源!要顺利通讯,就要保持以上流程各环节软件位数一致!
结论:64位的应用程序只能匹配64位的ODBC,64位ODBC只能匹配64位驱动程序。
(1)一般情况下,64位驱动程序对应64位的数据库管理程序。
(2)某些数据源程序(数据管理库如access、excel等)提供商可以单独提供32位或64位的驱动程序,一般情况下,32位(64位)的数据源程序只能安装或自动安装32位(64位)的驱动程序。如:Micro Office
但是,通过特殊的处理方式,可以为32位的数据源程序安装64位的驱动程序,以便与64的ODBC建立通讯,为下一步与64位的终端应用程序建立通讯做好准备!
(3)同理,32位的ODBC,只能为32位的应用程序、驱动程序(数据源)之间通讯建立通道!
例:SPSS MODELER 18.0(64位)——X不可通讯——ODBC(32位)——可以通讯—access(32位,与之对应32位驱动程序)
SPSS MODELER 18.0不能与ODBC(32位)通讯,但ODBC(32位)与access(32位,与之对应32位驱动程序)是可以通讯的。
必须保持三者一致!!

4、32位Microsoft Office 默认的32位ODBC驱动程序改变为64位ODBC驱动程序(特殊处理!)

32位的Microsoft Office 软件,默认安装32位ODBC驱动程序,如何单独安装对应的64位OFFICE的ODBC驱动程序?

64位ODBC驱动程序 Access 及 Excel

64位windows平台默认不安装Access的64位ODBC驱动,此下载将安装一系列组件,帮助在现有的 Microsoft Office 文件(例如 Microsoft Office Access 2010(*.mdb 和 *.accdb)文件和 Microsoft Office Excel 2010(*.xls、*.xlsx 和 *.xlsb)文件)与其他数据源(例如 Microsoft SQL Server)之间传输数据。还支持与现有文本文件建立连接。此外,还会安装 ODBC 和 OLEDB 驱动程序,供应用程序开发人员在开发与 Office 文件格式连接的应用程序时使用。

AccessODBC驱动原版资源:https://www.microsoft.com/en-us/download/details.aspx?id=13255

AccessDatabaseEngine.exe(32位)、AccessDatabaseEngine_X64.exe(64位)
(1)下载安装64位Office 2010 (常规方法)

一个好消息是Office 2010 有了64位版本,同时微软也发布了64为的ODBC驱动程序。见上!
(2)32位Office 2010 安装64为的ODBC驱动程序(特殊处理)

我们的机器上可能都已经安装了Office 2007等32位的Office,下载AccessDatabaseEngine_X64.exe安装时多半会碰到下面的错误信息,从而无法继续。

 

ODBC管理器相关知识汇总

只有升级到Office 2010 64位版一条路可以走了么?可是貌似微软都建议我们用32位的而不是64位的,我可不想就为这一个ODBC去升级惹麻烦。下面是Microsoft关于是用Office 32还是64的回答。

Yes, 64-bit Office 2010 product upgrades will be available. However we strongly recommend most users install 32-bit version of Office 2010 on both 32 and 64-bit Operating Systems because currently many common add-ins for Office will not function in the 64-bit edition. The 64-bit installation of Microsoft Office 2010 products will be available for users who commonly use verylarge documents or data set and need Excel 2010 programs to access greater than 2GB of memory. There may be technical issues with the 64-bit version and in order to install a 64-bit version of Office 2010 product users must have a 64-bit supported operating system on their PC.

http://office2010.microsoft.com/en-us/tech-guarantee/microsoft-office-2010-technology-guarantee-faq-HA101812304.aspx?redir=0

所以应该找个办法能在安装了32位Office的机器上安装这个64位的ODBC驱动。下面是更改方法:

先用RAR把AccessDatabaseEngine_X64.exe解压缩,里面会有一个AceRedist.msi安装文件,然后用Orca(下载地址http://www.pc6.com/softview/SoftView_14253.html#download)打开这个MSI,找到LaunchCondition里面的BLOCKINSTALLATION,删掉,保存。现在在运行AceRedist.msi,非常顺利。经过测试,使用正常。下图为64位ODBC程序界面:

ODBC管理器相关知识汇总

Orca 是一款由微软提供的用于 Windows Installer 数据库表编辑器。可用来编辑 Windows Installer 数据库文件 (.msi) 文件,合并模块 (.msm) 文件,补丁 (.msp) 文件,内部一致性计算程序 (.cub) 文件和补丁创建属性 (.pcp) 文件。是修改和本地化 Windows Installer 数据库的最佳辅助工具。

ODBC管理器相关知识汇总


 
 
5、 在64位win7如何查看一个程序是32位的还是64位的?
大多数朋友会关注自己的电脑操作系统是32位还是64位,不会关注安装的软件是多少位的,反正是只要能安上就行了。如何查看软件是32位还是64位,这个也同等重要,因为32位系统是不能安装64位软件的。U盘启动大师介绍两种方法查看软件是32位还是64位。
方法一:查看软件安装路径
第一步、对着软件图标击右键,选择属性
第二步、查看看软件的 安装路径,在软件属性界面,查看“目标”选项后面,看软件安装在哪一个文件夹,如下图所示,安装在Program Files (x86)文件夹就是32位软件;安装在Program Files文件夹的软件就是64位软件。
ODBC管理器相关知识汇总
方法二:查看任务管理器
打开任务管理器,看软件在任务管理器里面的进程后面有没有*32;有的话是32位软件;没有的话就是64位软件,如我们查看VMware虚拟机的位数,如下图所示
ODBC管理器相关知识汇总
通过以上方法:可以看出SPSS MODELER 18.0是64位的软件,而SPSS 21.0是32位的!
———问题实例  A——————————————————————————
做java数据库连接的时候遇到了点问题。
1、odbc里没有要用的驱动问题:
首先是创建数据源时,odbc里没有要用的驱动,因为我是64位的系统,但是安装的是32位的office。
于是去C/windows/syswow64文件夹下,打开odbcad.exe,这样打开的就是32位版本的odbc,有我要的access驱动。
顺利建好odbc!!
2、ODBC指定DSN中,驱动程序和应用程序之间的体系结构不匹配
顺利建好odbc后,eclipse下连接又出现了问题:
问题提示:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
原来我装的是64位的java,连接32位的odbc就有问题,要么就用64的去连接64位的odbc,要么就是32位的对32位的。于是我又装了32位的java,成功连接了数据库。
 
----------------------------------------------
win7 64位数据库连接问题:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
通过ODBC/JDBC连接程序和数据库时,异常报错“在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”的解决办法
在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
本机:64位win7,64位JDK,做Web实验用32位myeclipse不管是Access还是SQLServer连接数据库都出问题后,我终于明白当初做Java实验为啥连不上Access数据库但SQLServer没问题了,现在完美解决,哈哈!
原因:
64位win7操作系统ODBC版本默认为64位(建立的SQLServer数据源也为64位),需对应64位JDK及64位office(access),用myeclipse时也应对应64位myeclipse版本才可使用
  • 关于JDK释义
jdk - SunMicrosystems针对Java开发员的产品
JDK(Java Development Kit) 是 。
SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
没有JDK的话,无法编译Java程序,如果想只运行Java程序,要确保已安装相应的JRE。
若为32位myeclipse,与数据库连接时应对应32位ODBC数据源(建立的SQLServer数据源为32位)
-----------------------------
打开32位版本的odbc,利用这个为odbc创建系统 DSN 连接SQLServer或Access,Access后缀应为mdb,注意此时应把jdk路径设置为32位jdk所在路径,若用myeclipse也应使用32位版本myeclipse
注:
数据库建立并运行成功后,将JDK再改回64位好像对数据库也无影响了
 
 ——————自操作实例SPSS、SPSS MODELER 18.0————
1、我的access程序是32位的,所以 只能在32位的ODBC程序里,选择一个“薪酬.accdb”的access文件,数据源名为wwss。(特别注意:因access程序是32位的,在64位的ODBC程序里,无法找到该数据源的 驱动程序。)
spss modeler 18.0 是64位的,所以必须在64位的ODBC驱动程序里安装64位的access驱动才可建立通讯。
下图为32位的ODBC界面。
ODBC管理器相关知识汇总

 
 2、在32位SPSS软件里,引用ACCESS数据库。
  ODBC管理器相关知识汇总
 3、既可直接使用MS ACCESS DATABASE选择access库文件(方式1),也可设置ODBC间接引用数据库名为"WWSS”的数据源(方式2)!
ODBC管理器相关知识汇总

其他参考:
搭建asp.net网站http://blog.sina.com.cn/s/blog_48ad94910102x9b0.html


你可能感兴趣的:(数据库)