c语言之odbc编程指南c语言之odbc编程指南
?摘要本文在介绍了ODBC(开放性数据库连接,Open? DataBase? Connectivity)运行机制的基础上,着重讨论了VisualC++2.0下利用ODBCAPI及利用MFC进行ODBC编程的两种方法.??? 关键词ODBC,SQL,数据源,文档/视图结构,DBMS??? 一、ODBC的发展背景??? 在传统的数据库领域,数据库应用程序通常是指在特定的数据库管理系统(DBMS)的支持下,用特定的内嵌式结构化查询语言(SQL)开发的.这样的数据库应用程序存在如下的缺点:(1)它往往需要一个庞大的数据库管理系统的支持,对用户的软、硬件要求高;(2)它通常只能处理一种格式的数据库文件.??? 与传统的数据库应用程序的实现方法相比,Microsoft的开放性数据库连接(ODBC)标准则提供了一种新的途径:它建立了一组规范,并提供了一组高层应用程序调用接口和一套基于动态链接库(DLL)的运行支持环境.用这样一组接口规范开发的应用程序,使用标准的函数和结构化查询语言(SQL)对数据库进行操作,不必关心"数据源"(DataSource)来自何种数据库管理系统DBMS,所有的数据库的底层操作都是由相应的ODBC驱动程序(ODBCDriver)完成.只要有了相应的ODBC驱动程序,应用程序处理的对象-数据源就可以非常广泛,既可以是本机的某种数据库格式的文件,如FoxPro的*.dbf文件,也可以是远程数据库文件,如MicrosoftSQLServer等.??? 二、ODBC的运行机制??? ODBC的体系构架包括五个部分:ODBC管理器(ODBCAdministrator)、应用程序(Application)、ODBC驱动程序管理器(ODBCDriver? Manager)、ODBC驱动程序(ODBCDriver)和数据源(Data? Source).图1表示了ODBC各部分之间的关系.??? ODBC管理器在整个ODBC运行机制中起配置环境、登录信息的作用,它被安装在Control? Pannel里(ODBCINST.CPL).通过该工具,可以用来配置、增添和删除数据源,也可以用来删除、安装ODBC驱动程序.ODBC管理器把数据源和ODBC驱动程序的信息记录在ODBC.INI、ODBCINST.INI和ODBCISAM.INI中,或者登录在系统数据库中,ODBC的其他部件通过读取这些信息,相互作用,应用程序就能够实现对已登录数据库的共享.??? 应用程序(Application)的主要任务是通过调用标准的ODBC函数,提交SQL??句并返回结果,对结果进行处理.??? ODBC驱动程序管理器的作用是根据应用程序的要求,调用不同的ODBC驱动程序.??? ODBC驱动程序的作用是实现ODBC函数调用,对指定的数据源执行SQL语句,并把结果返回给应用程序.有时候,为了符合特定的数据库管理系统的语法,ODBC驱动程序还会对应用程序的要求作适当修改.这里,ODBC驱动程序的作用与运行在Windows下的打印机驱动程序的作用非常相似.??? 数据源,由用户要访问的数据及与之相关的操作系统、数据库管理系统和用于访问数据库管理系统所需的网络平台组成.??? 对应用程序而言,ODBC驱动程序管理器和ODBC驱动程序就像一个实现ODBC函数调用的整体单元,应用程序感觉不到它们之间的分工合作关系.整个ODBC的结构是基于一种独特的动态链接库DLL而存在的,它使得系统完全模块化了.??? 三、利用ODBC? API的C语言ODBC编程??? 下面以一个典型ODBC数据库访问程序的伪代码为例,说明用ODBCAPI的C语言进行ODBC编程的一般步骤.该程序从用户接受SQL查询语句,然后获取结果,集中各行各列的数据.??? HENV? henv??? HDBChdbc??? HSTMThstmt??? int? nCols??? SQLALLocEnv(&henv)/*环境申请,获得一个环境句柄*/??? SQLAllocConnect(henv,&hdbc)/*连接申请,获得数据库连接句柄*/??? SQLDriverConnect(hdbc,…)/*与具体的ODBC驱动程序和数据源联系*/??? SQLAllocStmt(hdbc,&hstmt)/*语句申请,获得一个语句句柄*/??? Input? SQLStatement/*从用户接受SQL语句*/??? SQLExecDirect(hstmt,SQLStatement,…)/*执行SQL语句*/??? SQLNumResultCols(hstmt,&nCols)/*获取结果