架构
应用程式
应用程式对外提供使用者交谈介面,同时对内执行资料之準备工作资料库系统所传回来的结果在显示给使用者看。简单来说,应用程式即ODBC 介面执行下列主要工作:1. Request a connection(i.e.session) with a data source. 2. Send SQL requests to the data source. 3. Define storage areas and data formats for the result of SQL requests. 4. Request results. 5. Process errors. 6. Request a commit or rollback of operations for transcation control. 7. Terminate a connection a data source.
驱动管理器
驱动管理器本身是MS Windows中一个动态连线程式库档案(ODBC.DLL)。应用程式透过驱动管理器去载入并连线资料源的驱动程式(driver)并连线资料源。驱动管理器主要工作如下:
1. Uses ODBC INI file to map a data source name to a specific driver DLL.
2. Processes server ODBC initialization calls.
3. Provides entry points to ODBC functions for each driver.
4. Provides parameter validation and sequence validation for ODBC calls.
驱动程式
驱动程式也是一个动态连线程式库档案,当应用程式呼叫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).
资料源
资料源唯一资料库系统(DBMS)或是资料库作业系统的一个组合。举例来说,套用库系统可以同时与下列两个或其中一个资料源连线。
1. A DBMaker DBMS running on a Microsoft Windows NT accessed by NTaccessed by TCP/IP.
2. A Tandem NonStop SQL DBMS running on the Guardian 90 accessed via a gateway.
套用系统程式通过标準API来连线资料源,因此开发过程中不需指定特定的资料库系统,所以资料库系统的开放性从此被建立。笔者认为在电脑系统进入开放时代之时,我们应可体会到标準的建立与系统的发展是同样的重要。而信息系统架构在资料库的必要性也随着信息化社会的蓬勃发展而更显重要,因此在ODBC标準日益成熟的同时,我们也同时可以感受到资料库系统在开放架构下,更需扮演强而有力的角色。
依据 ODBC 的规格,其API共可分为以下九类:
1. SQLAllocEnv.
2. SQLAllocConnect.
3. SQLConnect.
4. SQLPriverConnect.
5. SQLBrowseConnect.
1. SQLDataSource.
2. SQLGetInfo.
3. SQLGetFunctions.
4. SQLGetTypeInfo.
1. SQLSetConnectOption.
IV. 準备SQL指令之需求
1. SQLAllocStmt. 2. SQLPrepare. 3. SQLSetParam. 4. SQLParamOptions. 5. SQLGetCursorName. 6.SQLSetCursorName. 7. SQLSetScrollOptions.
1. SQLExecute. 2. SQLExecDirect. 3. SQLNativeSql. 4. SQLDescribeParanl. 5. SQLNumParams. 6.SQLParamData. 7. SQLPutData.
VI. 取得执行结果及有关结果的讯息
1. SQLRowCount. 2. SQLNumResultCols. 3. SQLDescribeCol. 4. SQLColAttributes. 5. SQLBindCol. 6.SQLFetch. 7. SQLExtendedFetch. 8. SQLGetData. 9. SQLSetDos. 10. SQLMoreResults. 11. SQLError.
VII. 取得有关资料源系统回录(System tables or Catalog)的讯息
1. SQLColumnPrivileges. 2. SQLColumns. 3. SQLForeignkeys. 4. SQLPrimaryKeys. 5.SQLProcedureColumns. 6. SQLProcedures. 7. SQLSpecialColumns. 8. SQLStatistics. 9. SQLTablePrivileges. 10. SQLTables.
ODBC程式流程VIII. 结束 SQL 指令需求
1. SQLFreeStmt. 2. SQLCancel. 3. SQLTransact.
IX. 结束与资料源的连线
1. SQLDisconnect. 2. SQLFreeConnect. 3. SQLFreeEnv.
以上所列之 ODBC API函式,我们发现全都以 SQL 为开头。除以上述分类外,各个函式在其必要性或复杂度上, 更被规定在不同的几个层级中 ODBC 函式的层级为核心层(Core level),第一层(Level 1),和第二层(Level 2)。我们再来看一个很基本的应用程式步骤是如何呢? 下图告诉我们这个答案。
回顾 ODBC 的架构及其执行过程,ODBC 造就了应用程式独立性(Application Independency)的特徵,使应用程式不需在乎资料源是何种资料库系统或者纯粹是个资料或文本档案,只要相对驱动程式能完成衔接的功能,则应用程式即可达到高度的独立性。
更新
ODBC现在看来是一个比较古老的东西,在1996年左右就比较定型了,其最新的版本是 3.8(Win7 自带;Win8 上有更新但仍叫 3.8),MICROSOFT也不打算对它做什麽大的更新,更多的目光应该被放到OLEDB、.NET DATA PROVIDER身上了。然而,正因为它是一个比较成熟和古老的规範,ODBC在大多数DBMS上都可以使用,可以说一个像样的DBMS都应该支持ODBC 3.0或以上的版本。
如果你打算学习如何开发一个ODBC DRIVER,最好的参考资料还是MSDN。如果你不打算採用ODBC API做开发,学习和了解ODBC也可以增加对DBMS的了解,也能更好地理解其他的资料库访问接口和技术。
一个基于ODBC的应用程式对资料库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的资料库操作由对应的DBMS的ODBC驱动程式完成。也就是说,不论是FoxPro、Access还是Oracle资料库,均可用ODBCAPI进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的资料库。
开放资料库互连(ODBC)是Microsoft引进的一种早期资料库接口技术。它实际上是我们要在本章后面加以讨论的ADO的前身。Microsoft引进这种技术的一个主要原因是,以非语言专用的方式,提供给程式员一种访问资料库内容的简单方法。换句话说,访问DBF档案或Access Basic以得到MDB档案中的资料时,无需懂得Xbase程式语言。事实上,Visual C++就是这样一个程式设计平台,即Microsoft最初是以ODBC为目标的。
你会发现,ODBC工作起来和Windows一样,它用包含在DLL内的驱动程式完成任务。其实,ODBC提供一套两个驱动程式:一个是资料库管理器的语言,另一个为程式语言提供公用接口。允许Visual C++用标準的函式调用经公用接口访问资料库的内容,是这两个驱动程式的汇合点。当然,还有其它和ODBC有关的实用程式类型的DLL。例如,一个这样的DLL允许你管理ODBC资料源。ODBC的实际管理接口出现在SYSTEM资料夹中的某个CPL(控制台)档案中寻找我们在后面要谈到这方面的问题。ODBC的确能履行承诺,提供对资料库内容的访问,并且没有太多的问题。它没有提供资料库管理器和C之间尽可能最好的资料转换,这种情况是有的,但它多半能像广告所说的那样去工作。唯一影响ODBC前程的是,它的速度极低至少较早版本的产品是这样。ODBC最初面世时,一些开发者曾说,因为速度问题,ODBC永远也不会在资料库领域产生太大的影响。然而,以Microsoft的市场影响力,ODBC毫无疑问是成功了。今天,只要有两种ODBC驱动程式的一种,那麽几乎每一个资料库管理器的表现都会很卓越。
使用
在可以用ODBC做任何事之前,必须有一个资料库模型在脑子裏。在一个像Access这样的应用程式中建立资料库架构通常会更容易一些,因为Access可以非常轻松地提供完成任务所需的各种功能。但是,如果你安装了所需的ODBC驱动程式,那就可以在C++中建立程式架构。一设计了资料库,就要为其建立ODBC资料源,我们会在本节中看到这一点。下面的过程并没有严格地说明活动的经过,只是说明了一种配置资料源的技术。
ODBC注解 我会在第5章中说明如何建立一个Access资料库。现在,我们只是看一看,为了访问那个资料库,我们下一步要做些什麽。
2. 单击Add按钮。会看到Create New Data Source(建立新的资料源)对话框,如下图所示。技巧 检查ODBC Data Source Administrator(ODBC资料源管理员)对话框的About选项卡,可以确定你正在使用的ODBC驱动程式的最新版本。这个选项卡包含了各种ODBC DLL的版本号、生产厂商的名称以及出现在SYSTEM资料夹中的档案名称。大多数情况下,通过查看版本号可以验证ODBC驱动程式是否是最新的版本。
ODBC3. 选择一个资料源。对本练习来说,我选择了Access资料源。单击Finish(完成),会看到某种类型的配置对话框,如下面的ODBC Microsoft Access 97Setup(设定)对话框所示。注解 如果你选择的资料源和我在本实例中选择的不同,那麽所需的配置步骤也和这裏说明的不同枣每个ODBC驱动程式都要求不同类型的配置。
ODBC4. 在Data Source Name(资料源名)域内输入资料源名称。一定要选择意义明确但又不过于冗长的名称。我选择Food Database(食品资料库),因为我最终要建立一个与食品库存有关的资料库的连结。
5. 在Description(描述)域内输入一段说明性文字。可以让这个项比上一个项稍长一些,因为它描述资料库的用途。另一方面,也不要写入像《战争与和平》那样大的小说。对本练习,我输入了:This database contains inventoryinformation for a food store(本资料库包含食品存储的库存信息)。
6. 单击Select(选择)按钮。你会看到一个File Open-type(档案开启类型)对话框,可以在那裏选择一个现有的资料库。ODBC驱动程式会自动选择正确的档案扩展名。
ODBC技巧 并不是一定要提前设计资料库。请注意,Access ODBC驱动程式还包括一个建立新资料库的按钮。很多ODBC驱动程式都提供了这种功能,但并不是全都这样。单击这个按钮会啓动资料库管理器应用程式,并允许你设计资料库。注意有一点很有意思,Access ODBC驱动程式还会允许你使用这个对话框压缩或修补资料库。
7. 选择系统资料库选项。在大多数情况下要选择None(无),除非你为应用程式特别建立了一个系统资料库。如果确实增加了系统资料库,它会出现在ODBC Microsoft Access 97 Setup(设定)对话框的System DSN(系统DSN)选项卡上。
8. 单击Advanced(高级)按钮,会看到Set Advanced Options(设定高级选项)对话框,如下图所示。无需对很多项做修改。但是,要把客户名增加到LoginName(注册名)域中,把客户口令增加到Password(口令)域中。这允许客户在访问你的资料库时,根本不用了解访问的细节--甚至不用了解被记录的客户名。技巧 为最最佳化潜在的区域,可以流览一下ODBC驱动程式提供的一系列高级选项。例如,Access ODBC允许你变更DBMS所用的执行绪数量。缺省设定3通常提供了不错的性能,但是你会发现,复杂程式中执行绪多一些的话,可以提高前台任务的速度。由于Windows使用了一些处理器迴圈对执行绪实施管理,所以使用了过多的执行绪又会降低应用程式的速度。
ODBC9. 设定完所需的高级选项后单击OK。
10. 再次单击OK关闭ODBC Microsoft Access 97 Setup(设定)对话框。应该看到,新的设定项已经增加到ODBC Data Source Administrator(ODBC资料源管理员)对话框中。如果今后要为资料库变更这些设定,只要简单地加亮它并单击Configure(配置)。移除资料库配置也很容易,只要加亮DSN并单击Remove(移除)即可。建立系统DSN和製作使用者DSN差不多。两者间一个显着的差别是,使用它们的目的不同。系统DSN告诉应用程式如何与资料库相连,在一些情况下如何与之互动作用。系统DSN不包含资料库所需的任何资料--它包含连线标準,其中可以包括从使用者列表到重要档案位置的一切信息。
种类
管理方法
ODBC 分为单束式和多束式两类
ODBC 使用层次的方法来管理资料库,在资料库通信结构的每一层,对可能出现依赖资料库产品自身特徵的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于资料库系统应用程式的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。
从结构上分,ODBC 分为单束式和多束式两类。
单束式驱动程式
单束式驱动程式介于应用程式和资料库之间,像中介驱动程式一样资料提供一个统一的资料访问方式。当使用者进行资料库操作时,应用程式传递一个ODBC 函式调用给ODBC 驱动程式管理器,由ODBC API 判断该调用是由它直接处理并将结果返回还是送交驱动程式执行并将结果返回。由上可见,单束式驱动程式本身是一个资料库引擎,由它直接可完成对资料库的操作,尽管该资料库可能位于网路的任何地方。
多束式驱动程式
多束式驱动程式负责在资料库引擎和客户应用程式之间传送命令和资料,它本身并不执行资料处理操作而用于远程操作的网路通信协定的一个介面。
前端应用程式提出对资料库处理的请求,该请求转给ODBC 驱动程式管理器,驱动程式管理器依据请求的情况,就地完成或传给多束驱动程式,多束式驱动程式将请求翻译为特定厂家的资料库通信接口(如Oracle 的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网路传送给伺服器上的资料引擎,伺服器处理完后把结果发回给资料库通信接口,资料库接口将结果传给多束式ODBC 驱动程式,再由驱动程式将结果传给应用程式。
档案DSN
你可能已经注意到了,上一节中的实例有问题。如果想单独配置网路上的每一台机器,它会工作得很好,但这可能不是一个好主意。还有一种存储建立资料源所需信息的方式:档案DSN。这正是我们要在本节中讨论的。下面的过程说明了设定档案DSN的一般方法。
ODBC1. 双击Control Panel(控制台)中的32位ODBC小程式,会看到ODBCData Source Administrator(ODBC资料源管理员)对话框。选择File DSN(档案DSN)选项卡,会看到如下图所示的对话框。要做的第一件事是,选择存储DSN信息的地方。2. 单击Look In(观察)下拉列表框,会看到一系列当前机器的目录和驱动器。可以为DSN使用任何存储位置。我通常在网路上选择资料库存储目录。使用UNC(通用命名标準)意味着,每个人都会用相同的路径来访问DSN档案。
ODBC技巧 Up One Level(上一和在Explorer中是一样的。可以用该按钮返回到上一级目录。最后,你会在My Computer(我的电脑)处结束,看到机器上所有驱动器的清单。
3. 单击Add(增加),会看到Create New Data Source(建立新的资料源)对话框。
ODBC4. 在列表中选择一个ODBC驱动程式,然后单击Next(下一个)。对本示例来说,我再次选择Access。你会看到Create New Data Source(建立新的资料源)对话框的下一页显示出来。在这裏选择资料源的名称和存储位置。单击Browse(流览)会看到File Open-type(档案开启类型)对话框,在这裏选择存储位置。输入一个档案名称,ODBC向导自动增加DSN作为扩展名。在本示例中,我选择SAMPLE.DSN作为DSN档案的名称。5. 单击Next(下一个)会看到一个摘要对话框,如下图所示。它说明正準备建立的DSN的参数。6. 单击Finish(完成)。这时,会看到ODBC Microsoft Access 97 Setup(设定)对话框的修改版。不能像我们在上一节所做的那样,在Data Source Name(资料源名)或Description(描述)栏位中增加信息了,不过,其它的都和以前一样。7. 一定要单击Select(选择)按钮输入资料库的名称,然后选择想要使用的资料库(如果想建立一个新资料库,也可以单击Create(建立))。
ODBC8. 完成配置过程时单击OK,你会在ODBC Data Source Administrator(ODBC资料源管理员)对话框中看到一个新的DSN档案项。和我们建立的前一个DSN不同,这个DSN实际上建立可以用文本编辑器来查看和编辑的档案。图4.1显示了我的档案的面板。请注意,它符合标準的INI档案格式。你可以在顶端看到【ODBC】标题。下面是我选择的全部设定。这个档案允许我从Visual C++选择资料源,而机器间的传输也是非常容易的。我甚至能在安装过程中按要求变更位置--在你不知道使用者会有什麽样的设定时,这一点确实很不错。
ODBC图书信息
图书一
基本信息
开放资料库互联(ODBC)技术与套用开放资料库互联(ODBC)技术与套用
作者:文必龙
ISBN:9787030055888
出版社:科学出版社
出版时间:1997
主题:资料库管理系统--接口
内容简介
开放资料库互联(ODBC)为资料库应用程式访问异构型资料库提供了统一的资料存取API,应用程式不必重新编译、连线就可以与不同的DBMS相联。目前支持ODBC的有Oracle,Access,X-Base等10多种流行的DBMS。本书介绍了ODBC的基本原理及SQL语言,并从两个角度介绍ODBC技术:一是从ODBC应用程式设计者的角度,将套用和开发中通常要用到的编程环节先总结成架构形式,然后分步骤讲解;另一是从ODBC驱动程式开发人员的角度,介绍如何开发ODBC驱动程式。本书还介绍了有关ODBC软体安装及资料源配置的方法。本书适用于广大资料库套用人员和开发人员,也可供大、中专院校师生参考。
图书二
书名:开放资料库互连
作者:( 美)Que Corporation着
ISBN号:7-302-02035-3
价格: 40.00
出版地:北京
出版社:清华大学出版社
出版时间:1995.11
页数:355 页
开本:16开
附注 :北京科海培训中心
本书原文名:Using ODBC 2
其他版本 :Using ODBC 2
主题 :关系资料库 -- 应用程式
科图分类号 :73.967
责任者:Que Corporation 着
孟小峰译
记录事务
调试应用程式时加以记录,这一点很重要。ODBC Data Source Administrator(ODBC资料源管理员)对话框也提供了这样的功能。可以选择跟蹤你通过ODBC对资料库进行的各种事务。当然,这些记录可能会变得相当大,但我们并不是总要使用它们。
ODBC开始记录事务时,只要双击控制台(Control Panel)中的32位ODBC小程式,开启ODBC Data Source Administrator(ODBC资料源管理员)对话框。选择Tracing(跟蹤)选项卡,你会看到如下图所示的对话框(请注意,该对话框的Windows 98版本略有不同)。如你所见,有三个单选按钮确定何时跟蹤ODBC调用。缺省设定是Don'tTrace(不跟蹤)。如果打算调试单个应用程式,应该选择All the Time(全部时间)。One-Time Only(只一次)在下一次连线期间跟蹤ODBC调用枣只要连线一拆除,跟蹤就关闭。当使用者带着特定的问题调用时,这是一个不错的选择。可以监视一次会话期间的连线,然后用该信息帮助建立排除错误的计画。
跟蹤不会自动开始。还要单击对话框右侧的Start Tracing Now(现在开始跟蹤)。只要跟蹤一开始,按钮标题就变成Stop Tracing Now(现在停止跟蹤)。再次单击按钮关闭跟蹤过程。
唯一要担心的其它设定是Log File Path(记录档案路径)。ODBC通常在根目录下的SQL.LOG档案中放入事务信息。但是,也可以将该信息放在网路驱动器上,或者使用者看不到的地方。在调试过程中,缺省位置通常就比较适宜。
注解 除非你想建立自己的日志记录DLL,否则不要变更Custom Trace DLL(自定义跟蹤DLL)域内的设定。在这裏列出的DLL枣ODBCTRAC.DLL枣负责维持事务记录。

















