什么是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
    在可以用ODBC做任何事之前,必须有一个数据库棗至少在脑子里。在一个像Access这样的应用程序中创建数据库框架通常会更容易一些,因为Access可以非常轻松地提供完成任务所需的各种功能。但是,如果你至少安装了所需的ODBC驱动程序,那就可以在C++中创建程序框架。一设计了数据库,就要为其创建ODBC数据源,我们会在本节中看到这一点。下面的过程并没有严格地说明活动的经过,只是说明了一种配置数据源的技术。
    注释 我会在第5章中说明如何创建一个Access数据库。现在,我们只是看一看,为了访问那个数据库,我们下一步要做些什么。
    1. 双击Control Panel(控制面板)中的32ODBC小程序(如果当前系统上未安装16位驱动程序,那么一些版本的Windows使用简单的ODBC小程序)。你会看到ODBC Data Source AdministratorODBC数据源管理员)对话框,如下图所示。请注意,该对话框中当前显示的选项卡是User DSN(用户数据源名)选项卡。对系统级数据库来说,使用System DSN(系统数据源名)选项卡;对文件级数据源(从严格意义上说,它不是数据库),使用File DSN(文件数据源名)选项卡。你还会看到一个数据库的缺省选项。如果想从Visual C++内部创建数据库,就会用到这个选项。

    警告 对本地数据库来说,通常要在User DSN(用户DSN)选项卡上创建一个项;对远程数据库,则在System DSN(系统DSN)选项卡上创建。任何情况下,都不能在User DSN(用户DSN)和System DSN(系统DSN)选项卡上创建同名的项。通常会出现的问题是,你试图访问远程数据库,但从Web服务器获得了非常奇怪和矛盾的错误消息。事实上,如果在远程数据库访问期间得到了奇怪的错误消息,那么32ODBC小程序是首先应该查看的地方之一。
    2. 单击Add按钮。会看到Create New Data Source(创建新的数据源)对话框,如下图所示。

    技巧 检查ODBC Data Source AdministratorODBC数据源管理员)对话框的About选项卡,可以确定你正在使用的ODBC驱动程序的最新版本。这个选项卡包含了各种ODBC DLL的版本号、生产厂商的名称以及出现在SYSTEM文件夹中的文件名。大多数情况下,通过查看版本号可以验证ODBC驱动程序是否是最新的版本。
    3. 选择一个数据源。对本练习来说,我选择了Access数据源。单击Finish(完成),会看到某种类型的配置对话框,如下面的ODBC Microsoft Access 97Setup(设置)对话框所示。

    注释 如果你选择的数据源和我在本实例中选择的不同,那么所需的配置步骤也和这里说明的不同棗每个ODBC驱动程序都要求不同类型的配置。
    4. Data Source Name(数据源名)域内输入数据源名称。一定要选择意义明确但又不过于冗长的名称。我选择Food Database(食品数据库),因为我最终要创建一个与食品库存有关的数据库的链接。
    5. Description(描述)域内输入一段说明性文字。可以让这个项比上一个项稍长一些,因为它描述数据库的用途。另一方面,也不要写入像《战争与和平》那样大的小说。对本练习,我输入了:This database contains inventoryinformation for a food store(本数据库包含食品存储的库存信息)。
    6. 单击Select(选择)按钮。你会看到一个File Open-type(文件打开类型)对话框,可以在那里选择一个现有的数据库。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使用了一些处理器循环对线程实施管理,所以使用了过多的线程又会降低应用程序的速度。
    9. 设置完所需的高级选项后单击OK
    10. 再次单击OK关闭ODBC Microsoft Access 97 Setup(设置)对话框。应该看到,新的设置项已经添加到ODBC Data Source AdministratorODBC数据源管理员)对话框中。如果今后要为数据库更改这些设置,只要简单地加亮它并单击Configure(配置)。删除数据库配置也很容易,只要加亮DSN并单击Remove(删除)即可。

    创建系统DSN和制作用户DSN差不多。两者间一个显著的差别是,使用它们的目的不同。系统DSN告诉应用程序如何与数据库相连,在一些情况下如何与之交互作用。系统DSN不包含数据库所需的任何数据——它包含连接标准,其中可以包括从用户列表到重要文件位置的一切信息。
    文件DSN
    你可能已经注意到了,上一节中的实例有问题。如果想单独配置网络上的每一台机器,它会工作得很好,但这可能不是一个好主意。还有一种存储创建数据源所需信息的方式:文件DSN。这正是我们要在本节中讨论的。下面的过程说明了设置文件DSN的一般方法。
    1. 双击Control Panel(控制面板)中的32ODBC小程序,会看到ODBCData Source AdministratorODBC数据源管理员)对话框。选择File DSN(文件DSN)选项卡,会看到如下图所示的对话框。要做的第一件事是,选择存储DSN信息的地方。

    2. 单击Look In(观察)下拉列表框,会看到一系列当前机器的目录和驱动器。可以为DSN使用任何存储位置。我通常在网络上选择数据库存储目录。使用UNC(通用命名标准)意味着,每个人都会用相同的路径来访问DSN文件。
    技巧 Up One Level(上一级)按钮(在Look In下拉列表框旁边)的工作方式和在Explorer中是一样的。可以用该按钮返回到上一级目录。最后,你会在My Computer(我的电脑)处结束,看到机器上所有驱动器的清单。
    3. 单击Add(添加),会看到Create New Data Source(创建新的数据源)对话框。
    4. 在列表中选择一个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(创建))。
    8. 完成配置过程时单击OK,你会在ODBC Data Source AdministratorODBC数据源管理员)对话框中看到一个新的DSN文件项。

    和我们创建的前一个DSN不同,这个DSN实际上创建可以用文本编辑器来查看和编辑的文件。图4.1显示了我的文件的外观。请注意,它符合标准的INI文件格式。你可以在顶端看到[ODBC]标题。下面是我选择的全部设置。这个文件允许我从Visual C++选择数据源,而机器间的传输也是非常容易的。我甚至能在安装过程中按要求更改位置——在你不知道用户会有什么样的设置时,这一点确实很不错。

    记录ODBC事务
    调试应用程序时加以记录,这一点很重要。ODBC Data Source AdministratorODBC数据源管理员)对话框也提供了这样的功能。可以选择跟踪你通过ODBC对数据库进行的各种事务。当然,这些记录可能会变得相当大,但我们并不是总要使用它们。
    开始记录事务时,只要双击控制面板(Control Panel)中的32ODBC小程序,打开ODBC Data Source AdministratorODBC数据源管理员)对话框。选择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)域内的设置。在这里列出的DLLODBCTRAC.DLL棗负责维持事务记录。

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

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMSODBC驱动程序完成。也就是说,不论是FoxProAccess还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

一个完整的ODBC由下列几个部件组成:

应用程序(Application)

ODBC管理器(Administrator)。该程序位于Windows 95控制面板(Control Panel)32ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。

驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。

ODBC API

ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。

数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

各部件之间的关系如图下图所示:

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBCODBC就能建立起与相应数据库的连接。

ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。

在访问ODBC数据源时需要ODBC驱动程序的支持。用Visual C++ 5.0安装程序可以安装SQL Server Access Paradox dBase FoxPro Excel Oracle Microsoft Text等驱动程序.在缺省情况下,VC5.0只会安装SQL Server Access FoxProdBase的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行VC 5.0的安装程序并选择所需的驱动程序。
sql server
SQL

SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create,以及数据库实例名是什么意思Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。

SQL Server

SQL Server 是一个关系数据库管理系统它最初是由Microsoft Sybase Ashton-Tate三家公司共同开发的于1988 年推出了第一个OS/2 版本在Windows NT 推出后MicrosoftSybase SQL Server 的开发上就分道扬镳了Microsoft SQL Server 移植到Windows NT

系统上专注于开发推广SQL Server Windows NT 版本Sybase 则较专注于SQL ServerUNIX 操作系统上的应用在本书中介绍的是Microsoft SQL Server 以后简称为SQL ServerMS SQL Server

SQL Server 2000 Microsoft 公司推出的SQL Server 数据库管理系统的最新版本该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能具有使用方便可伸缩性好与相关软件集成程度高等优点可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用