ODBCAPI编程

合集下载

11.3.2 ODBC API编程实例_Visual C++从入门到精通_[共6页]

11.3.2 ODBC API编程实例_Visual C++从入门到精通_[共6页]

24411.3.2 ODBC API 编程实例本小节利用ODBC API 函数实现对数据库的访问。

【范例11-1】 利用ODBC API 函数设计应用程序,对11.2.2小节中的学生成绩管理数据库进行操作,该数据库已经注册为数据源test 。

学生成绩管理数据库有3张用户表,分别是学生表、成绩表和课程表。

第1步:创建工程ODBC_API利用前面介绍的内容,用MFC AppWizard 创建一个单文档,不基于数据库的工程ODBC_API 。

第2步:给工程ODBC_API 添加资源 ➊ 选择工作空间中的【ResourceView 】选项卡,展开【Menu 】节点,双击【IDR_MAINFRAME】,在编辑区双击【帮助】菜单后面的空白菜单,在【Caption 】文本框中输入“访问数据库”。

➋ 双击【访问数据库】的子菜单,设置【ODBC API 】的【ID 】为ID_ODBCAPI ,并将【访问数据库】菜单拖动到【帮助】菜单前面。

➌ 选择【View 】 【ClassWizard 】菜单,打开【MFC ClassWizard 】对话框,在【Message Maps 】选项卡中,在【Class name 】下拉列表中选择“CODBC_API View ”选项,在【Object IDs 】列表框中选择“ID_ODBCAPI ”选项,在【Messages 】列表框中选择“COMMAND ”选项,然后单击【Add Function】,在弹出的对话框中单击【OK 】按钮,再单击【OK 】按钮关闭【MFC Class Wizard 】对话框。

➍ 右击【ResourceView 】选项卡中的【Dialog 】节点,选择【Insert Dialog 】菜单,插入对话框IDD_DIALOG1。

在对话框上添加两个Static Text 控件、1个Edit Box 控件、1个List Box 控件和1个List Control 控件,均使用用默认的ID 。

使用ODBCAPI连接数据库

使用ODBCAPI连接数据库

使用ODBCAPI连接数据库ODBC (Open Database Connectivity) API 是一个为了在不同的应用程序中连接数据库而设计的接口。

它提供了一个标准的方法来访问各种数据库管理系统(DBMS),包括微软的SQL Server、Oracle、MySQL等等。

ODBC API可以让应用程序开发者在不用修改代码的情况下,连接不同的数据库系统。

ODBCAPI的使用可以分为以下几个步骤:1. 安装ODBC驱动程序:首先,在开发机上安装数据库系统对应的ODBC驱动程序。

每个数据库系统都有自己的ODBC驱动程序。

例如,如果要连接MySQL数据库,可以安装MySQL Connector/ODBC驱动程序;如果要连接SQL Server数据库,可以安装SQL Server Native Client驱动程序。

2.配置ODBC数据源:在ODBC数据源管理器中配置ODBC数据源。

数据源是一个指向数据库的连接,它包含了连接数据库所需的信息,如数据库的名称、服务器的地址、登录名和密码等。

可以通过ODBC管理器创建用户数据源(只对当前用户可见)或系统数据源(对所有用户可见)。

3. 连接数据库:在应用程序中使用ODBC API连接数据库。

首先,需要调用`SQLAllocHandle`函数来分配一个ODBC环境句柄、连接句柄和语句句柄。

然后,使用`SQLSetEnvAttr`函数设置环境句柄的属性,如ODBC版本号。

接下来,使用`SQLConnect`函数连接到ODBC数据源。

此时需要提供数据源名称、登录名和密码等信息。

4. 执行SQL语句:连接成功后,就可以使用ODBC API执行SQL语句。

可以使用`SQLPrepare`函数准备SQL语句,然后使用`SQLExecute`函数执行它。

也可以直接使用`SQLExecDirect`函数准备和执行SQL语句。

执行完SQL语句后,可以使用`SQLFetch`函数获取查询结果集中的一行数据。

ODBC API编程步骤

ODBC API编程步骤

ODBC API编程步骤通常使用ODBC API开发数据库应用程序需要经过如下步骤:∙连接数据源。

∙分配语句句柄。

∙准备并执行SQL语句。

∙获取结果集。

∙提交事务。

∙断开数据源连接并释放环境句柄。

下面对上述步骤做详细的介绍。

步骤1:连接数据源为了连接数据源,必须要建立一个数据源连接的环境句柄。

通过调用SQLAllocEnv函数实现对环境句柄的分配,在ODBC 3.0里,这个函数已经被SQLAllocHandle取代,但是熟悉ODBC API的开发人员还是习惯用这个函数建立环境句柄,因为VC++开发平台有一个映射服务,这个服务将程序代码对函数SQLAllocEnv的调用转向对函数SQLAllocHandle的调用。

这里有必要对“环境句柄”这个概念进行说明。

句柄是指向一个特殊结构的指针,而环境指的是驱动程序管理器需要为该驱动程序存储的有关系统和数据源的一般信息。

由于这个时候还没有建立同数据源的连接,驱动程序还并不知道该使用哪一个驱动程序来完成这个任务,所以这个任务只能由驱动程序管理器来完成,利用这个环境句柄保留信息直到被使用。

使用函数SQLAllocEnv创建环境句柄的语法如下:HENV henv;RETCODE rcode;rcode = ::SQLAllocEnv(SQL_HANDLE_ENV, SQL_NULL, & henv);if(rcode == SQL_SUCCESS) // 环境句柄创建成功{// 执行其它操作…………}完成了环境句柄的创建以后,还要建立一个连接句柄。

连接句柄的创建函数是SQLAllocConnect,其调用语法如下:HDBC hdbc;retcode = ::SQLAllocConnect( m_henv, & hdbc);if(rcode == SQL_SUCCESS) // 连接句柄创建成功{// 执行其它操作…………}完成了环境句柄和连接句柄的创建以后,就可以进行实际的数据源连接了。

(完整版)ODBC编程培训教程

(完整版)ODBC编程培训教程

ODBC编程培训教程1概述 (3)2ODBC API访问数据库 (3)2.1ODBC简要介绍 (3)2.2ODBC结构 (3)2.3ODBC进行数据库开发基础知识简介 (4)2.3.1建立odbc dsn (5)2.3.2使用ODBC所需要的文件 (7)2.3.3SQL语句的执行方式 (7)2.3.4获取SQL语句的执行结果 (7)2.3.5程序执行的基本流程 (8)2.3.6数据类型定义 (9)2.3.7ODBC句柄 (13)2.4为本章的例程创建DSN与数据库表 (13)2.5ODBC的基本功能介绍 (13)2.5.1所需要了解的ODBC API (13)2.6ODBC的其他功能介绍 (19)2.6.1ODBC连接句柄的参数设置 (19)2.6.2ODBC语句句柄的参数设置 (20)2.6.3ODBC中使用可以滚动的光标 (20)2.6.4ODBC的参数邦定 (22)2.6.5SQL的准备和执行 (24)2.6.6BLOB字段的更新和查询 (26)2.6.7ODBC对事务的支持 (28)3结束语 (29)ODBC编程培训教程1概述本文主要介绍ODBC 的功能,所有内容都与ODBC 3.X版本兼容。

大致包括:●使用ODBC进行数据库连接●利用ODBC直接执行SQL语句●ODBC光标类型介绍●利用滚动光标或非滚动光标进行结果集查询●SQL语句的准备执行方式●BLOB数据字段的查询和修改●ODBC对事务的支持本文的数据库利用了GBase,ODBC在使用时是与数据库无关的所以所有例程都可以运行在其他数据库上,例如Oracle。

只是有些sql语句的语法需要修改。

2ODBC API访问数据库2.1ODBC简要介绍ODBC(Open Database Connectivity)是由微软公司提出的一个用于访问数据库的统一界面标准,随着客户机/服务器体系结构在各行业领域广泛应用,多种数据库之间的互连访问成为一个突出的问题,而ODBC成为目前一个强有力的解决方案。

LinuxUnix下ODBC的安装、配置与编程

LinuxUnix下ODBC的安装、配置与编程

Linux/Unix下ODBC的安装、配置与编程本文主要内容是介绍ODBC的简单原理,以及如何在Linux/Unix下进行ODBC的安装、配置与编程。

ODBC原理ODBC 是Open Database Connect 即开放数据库互连的简称,它是由Microsoft 公司于1991 年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。

它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。

ODBC 主要由驱动程序和驱动程序管理器组成。

驱动程序是一个用以支持ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC 管理程序设定的与相应数据库系统对应的别名即可。

驱动程序管理器可链接到所有ODBC 应用程序中,它负责管理应用程序中ODBC 函数与DLL 中函数的绑定。

ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。

从结构上分,ODBC 分为单束式和多束式两类。

1.单束式驱动程序单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。

当用户进行数据库操作时,应用程序传递一个ODBC 函数调用给ODBC 驱动程序管理器,由ODBC API 判断该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。

由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。

2.多束式驱动程序多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议的一个界面。

ODBC API编程

ODBC API编程

ODBC API数据库编程开发1、通常数据库开发人员将标准的SQL语句发送给ODBC驱动程序,再由ODBC的驱动程序将这个SQL语句映射成数据库可以支持的SQL语句2、ODBC API是独立于DBMS和操作系统的,而且与编程语言无关3、ODBC API开发数据库应用程序需经过如下步骤:A、连接数据源B、分配语句句柄C、准备并执行SQL语句D、获取结果集E、提交事务F、断开数据源连接并释放环境句柄4、步骤细化A、连接数据源a、为了连接数据源,必须要建立一个数据源连接的环境句柄。

句柄:是指向一个特殊结构的指针环境:驱动程序管理器需要为该驱动程序存储的有关系统和数据源的一般信息环境句柄:即一个指向保存数据源信息的结构体的指针此环境句柄通过SQLAllocHandle函数或者SQLAllocEnv函数分配获得HENV henv;RETCODE rcode;rcode = ::SQLAllocEnv(SQL_HANDLE_ENV, SQL_NULL, &henv);if (rcode == SQL_SUCCESS) // 环境句柄创建成功b、完成环境句柄创建后,还需要建立一个连接句柄。

通过SQLAllocConnect函数创建HDBC hdbc;rcode = ::SQLAllocConnect(henv, &hdbc);if (rcode == SQL_SUCCESS) // 连接句柄创建成功c、在上两步的基础之上就可以进行实际数据源的连接。

连接函数是SQLConnectrcode = ::SQLConnect(hdbc,(PUCHAR)pszSourceName, SQL_NTS,(PUCHAR)pszUserId, wLengthUID,(PUCHAR)pszPassword, wLengthPSW);if (rcode == SQL_SUCCESS) // 数据源连接成功注:有时候ODBC数据源并非事先在PC里建立好的,这时需要应用程序动态创建ODBC 数据源。

ODBC_API参考

ODBC_API参考

使用ODBC API进行数据库编程ODBC(Open Database Connectivity,开放数据库连接),是由 Microsoft 公司基于X/OPEN CLI 提出的用于访问数据库的应用程序编程接口,主要完成应用程序和数据库系统之间的中间件功能。

基于 ODBC 的应用程序通过 ODBC 提供的 API 与数据库进行交互,在避免了应用程序直接操作数据库系统的同时,极大的增强了应用程序的可移植性、扩展性和可维护性。

ODBC定义了访问数据库的API一个规范,这些API独立于不同厂商的数据库产品。

在开始使用ODBC编程之前,需要安装ODBC驱动程序,并在ODBC驱动管理器中注册。

Windows 操作系统自带了ODBC驱动程序管理器, 可以在“控制面板->管理工具->ODBC数据源管理器” 找到。

一、使用ODBC需要包含的头文件和库文件ODBC头文件有5个:sql.h, sqlext.h, sqltypes.h, sqlucode.h and odbcinst.h。

一般情况下用到sql.h 和sqlext.h。

#include "sql.h" // This is the the main include for ODBC Core functions. #include "sqlext.h" // This is the include for applications using the Microsoft SQL Extensions#include "sqltypes.h" // This file defines the types used in ODBC#include "sqlucode.h" // This is the unicode include for ODBC Core functions#include "odbcinst.h" // This is the application include file for the SQL Server driver specific defines.库文件:odbc32.lib二、ODBC 应用的结构图 2.1 一个简单的 ODBC 应用的概念模型一个 ODBC 程序通常可以分为三个模块:初始化、数据库操作和资源释放。

ODBC_API开发教程

ODBC_API开发教程

ODBC API开发教程第 1 章介绍在文章的开头做一个习惯性的介绍。

本文从2002年11月开始写,基本上在2002年12月时完成,当时本来作为一本书的一个章节,后来由于某些原因没有完成该书。

这段时间将本文内容进行了一些整理,放在网上希望能够给大家一些帮助。

本文的内容主要是关于ODBC 的功能,所有内容都与ODBC 3.X版本兼容。

本文简要介绍了ODBC的历史和发展,也介绍了ODBC的基本的常用功能。

大致包括:使用ODBC进行数据库连接利用ODBC直接执行SQL语句ODBC光标类型介绍利用滚动光标或非滚动光标进行结果集查询存储过程的调用与参数绑定SQL语句的准备执行方式BLOB数据字段的查询和修改本文的数据库利用了MS SQL Server,ODBC在使用时是与数据库无关的所以所有例程都可以运行在其他数据库上,例如Oracle。

其实利用Access数据库来进行练习也是可以的,但是由于Access不能支持存储过程,所以我没有使用Access 数据库。

由于例程代码没有找到,所以没有就没有办法提供,但是文中的代码都比较详细而且有具体的解释。

书中有很多错误和不足之处希望大家能够容忍和包含,也欢迎来信指出。

第 2 章 ODBC API访问数据库2.1 ODBC简要介绍2.1.1 在没有ODBC以前请允许我将那时候成为第二黑暗时代,第一黑暗时代是没有数据库的时代。

ODBC的出现结束了数据库开发的无标准时代。

在没有ODBC以前不同的数据库的开发所采用的标准是不统一的。

一般来讲不同的数据库厂商都有自己的数据库开发包,这些开发包支持两种模式的数据库开发:预编译的嵌入模式(例如Oracle 的ProC,SQL Server的ESQL)和API调用(例如Oracle的OCI)。

对于一个开发人员来讲使用预编译方式开发是极其痛苦的,我就有过这样的经历,所有的SQL语句要写在程序内部,并且遵守一定的规则,然后由数据库厂商的预编译工具处理后形成C代码,最后由C编译器进行编译。

在VB中直接用ODBC API访问数据库

在VB中直接用ODBC API访问数据库

在VB中直接用ODBC API访问数据库.txt31岩石下的小草教我们坚强,峭壁上的野百合教我们执著,山顶上的松树教我们拼搏风雨,严寒中的腊梅教我们笑迎冰雪。

在VB中直接用ODBC API访问数据库中国航空信息中心吴斌计算机世界 19980608开放数据库互连(ODBC)已经成为Client/Server数据库应用系统中访问远程数据库的一个标准。

作为强大的前端开发工具,Visual Basic为开发者提供了多种访问ODBC数据源的途径,如JET数据库引擎、ODBC API函数、RDO接口等。

比较而言,直接使用ODBC API函数的编程难度最大,但获得的存取数据库的性能也最佳。

ODBC API函数的声明方法与使用其它动态库函数一样,在VB中使用ODBC API函数之前,必须事先声明将要使用的函数、常量和数据结构。

ODBC API函数驻留在ODBC运行动态库ODBC.DLL(16位)或ODBC 32.DLL(32位)中,该动态库位于Windows子目录system中。

通常做法是在VB项目中单独使用一个模块文件,然后将ODBC API声明语句加入其中,下面就是本文实例中使用的模块文件module1.bas的内容:Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As IntegerDeclare Function SQLAllocConnect Lib "odbc32.dll" (ByVal henv&, phdbc&) As Integer Declare Function SQLAllocStmt Lib "odbc32.dll" (ByVal hdbc&, phstmt&) AsInteger Declare Function SQLConnect Lib "odbc32.dll" (ByVal hdbc&, ByVal szDSN$,ByVal cbDSN%, ByVal szUID$, ByVal cbUID%, ByVal szAuthStr$, ByVal cbAuthStr%) As Integer Declare Function SQLColAttributesString Lib "odbc32.dll" Alias "SQLColAttributes" (ByVal hstmt&, ByVal icol%, ByVal fDescType%, ByVal rgbDesc As String, ByVal cbDescMax%, pcbDesc%, pfDesc&) As IntegerDeclare Function SQLDisconnect Lib "odbc32.dll" (ByVal hdbc&) As IntegerDeclare Function SQLExecDirect Lib "odbc32.dll" (ByVal hstmt&, ByVal szSqlStr$, ByVal cbSqlStr&) As IntegerDeclare Function SQLFetch Lib "odbc32.dll" (ByVal hstmt&) As IntegerDeclare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hdbc&) As IntegerDeclare Function SQLFreeEnv Lib "odbc32.dll" (ByVal henv&) As IntegerDeclare Function SQLFreeStmt Lib "odbc32.dll" (ByVal hstmt&, ByVal fOption%) As IntegerDeclare Function SQLGetData Lib "odbc32.dll" (ByVal hstmt&, ByVal icol%,ByVal fCType%, ByVal rgbValue As String, ByVal cbValueMax&, pcbValue&) As Integer Declare Function SQLNumResultCols Lib "odbc32.dll" (ByVal hstmt&, pccol%) As Integer Global Const SQL_C_CHAR As Long = 1Global Const SQL_COLUMN_LABEL As Long = 18Global Const SQL_DROP As Long = 1Global Const SQL_ERROR As Long = -1Global Const SQL_NO_DATA_FOUND As Long = 100Global Const SQL_SUCCESS As Long = 0需要说明的是,在函数声明时,应该根据程序的运行环境选择相应的动态库。

odbc编程

odbc编程

odbc编程ODBC编程是一种常用的数据库访问方式,它提供了一种标准的接口,使得不同的应用程序可以通过相同的方式来访问不同的数据库。

本文将介绍ODBC编程的基本概念、使用方法以及一些常见的应用场景。

一、ODBC编程的基本概念ODBC全称为Open Database Connectivity,它是一种应用程序接口(API),用于访问各种数据库的标准。

通过ODBC,应用程序可以使用统一的方式来连接、查询和更新数据库。

ODBC的核心概念包括数据源、数据源名称(DSN)、驱动程序和连接。

1. 数据源(Data Source):数据源是指数据库的名称或位置,可以是本地的数据库文件,也可以是远程的数据库服务器。

在ODBC中,数据源可以用一个字符串来表示,比如一个文件路径或一个网络地址。

2. 数据源名称(Data Source Name,DSN):DSN是一个标识符,用于标识一个具体的数据源。

它包含了连接数据库所需的信息,比如数据库的类型、地址、用户名和密码等。

在ODBC编程中,我们可以通过DSN来连接数据库,而不需要关心具体的数据库类型和连接细节。

3. 驱动程序(Driver):驱动程序是ODBC的核心组成部分,它负责实际连接数据库并执行相应的操作。

不同的数据库类型通常需要不同的驱动程序来进行连接和操作。

在ODBC编程中,我们需要根据数据库类型选择合适的驱动程序。

4. 连接(Connection):连接是指应用程序与数据库之间建立的通信通道。

在ODBC编程中,我们首先需要建立一个连接,然后才能进行后续的查询和更新操作。

连接可以通过DSN来建立,也可以直接指定连接参数。

二、ODBC编程的使用方法ODBC编程主要包括以下几个步骤:加载驱动程序、建立连接、执行SQL语句、处理结果和关闭连接。

下面我们将分别介绍这些步骤的具体实现。

1. 加载驱动程序:在使用ODBC编程之前,我们首先需要加载相应的驱动程序。

驱动程序通常是一个动态链接库(DLL)文件,我们可以使用系统提供的函数来加载和卸载它。

在SDK下进行数据库编程(三)—ODBC API篇

在SDK下进行数据库编程(三)—ODBC  API篇

对于程序设计人员编程难度较大,但使用 O 毗 A I D P 进行数据
库编程时使费们拥有较大限度的灵活性, 由此获得的存取数据 库的性能也是最佳。我们可以通过这一个 O 毗 A I D P 来访问不 同类型的数据库。而且,通过相应的0 丑 Dc驱动程序 ,我们可 以方便地实现不同数据类型之间的转换。同时, 对我们深入了 解其它数据库编程的接 口也能从中受到启发
J ̄ e 数据库文件 mb 的作为数据库开发工具。 d) 提供了一种通

DO A 最适合于单系统应
用程序或小范围本地分布使用。
}凰n 肋0 是一个链接到衄B 的面向对象的数据访问接 c 口. 形式上具有所有 0 的底层功能和灵活性。但是R 吩c 呻在访
= 、 ∞吐 "I 用
1 .叩B 的体系结构 。 C 因为c : c 的结均是建 客户 / 务器体蒹结冉之匕 B 立在 机 服 ,用
2 ,∞虻 ^ I P 的分类
OB P D C A I函数通常分为 以下几类{
+∞B 管理函数 主要用来安装、建立及配置用户程序 c 所运行的 O B D C环境。
维普资讯
佃 c 驱动程序管理 函数
主要负责 ∞日 操作的初始化 c
SL DC h bl Q  ̄B d e
S L eCn ett r( Q Gton cA t )获取这些连接属性 ,属性的设置或
获取是一个可以省略的,我们可 Nhomakorabea结果集 。
数 主要获取在呲 运行期 间来 自驱动程序 、数据源、OB 驱动程序管理器、s 语句及 DC 札
行操作。 接着调用 S Cnet ) O onc ( 用以把已 L 存在的羲据源连接
开放数据库互连 (D C O S )已经成为 C ln 1 e t/S r e ev r数

linux odbc编程实例

linux odbc编程实例

在Linux上使用ODBC编程,首先需要确保你已经安装了相应的ODBC驱动程序和库。

对于大多数Linux发行版,可以使用包管理器(如apt、yum或dnf)来安装。

以下是一个简单的示例,演示如何使用C语言和ODBC API连接到MySQL数据库并执行查询:c#include <stdio.h>#include <stdlib.h>#include <sql.h>#include <sqlext.h>#include <mysql/mysql.h>int main() {SQLHANDLE hEnv;SQLHANDLE hDbc;SQLRETURN ret; /* ODBC API return status */SQLCHAR outstr[1024];SQLSMALLINT outstrlen;const char *dsn = "mydsn"; /* DSN名称 */const char *user = "username"; /* 用户名 */const char *password = "password"; /* 密码 *//* 初始化ODBC环境 */SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);/* 连接到数据库 */ret = SQLDriverConnect(hEnv, NULL, (SQLCHAR *)dsn, SQL_NTS,(SQLCHAR *)user, SQL_NTS, (SQLCHAR *)password, SQL_NTS);if (SQL_SUCCEEDED(ret)) {printf("连接到数据库成功\n");} else {printf("连接到数据库失败: %s\n", SQLDriverConnect(hEnv, NULL, (SQLCHAR *)dsn, SQL_NTS,(SQLCHAR *)user, SQL_NTS, (SQLCHAR *)password, SQL_NTS)); return 1;}/* 打开一个连接 */ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);if (SQL_SUCCEEDED(ret)) {printf("打开连接成功\n");} else {printf("打开连接失败: %s\n", SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc));return 1;}/* 执行查询 */ret = SQLExecDirect(hDbc, (SQLCHAR *)"SELECT * FROM mytable", SQL_NTS);if (SQL_SUCCEEDED(ret)) {printf("执行查询成功\n");/* 获取查询结果 */while ((ret = SQLFetch(hDbc)) == SQL_SUCCESS) {printf("%s\n", outstr);}} else {printf("执行查询失败: %s\n", SQLExecDirect(hDbc, (SQLCHAR *)"SELECT * FROM mytable", SQL_NTS));return 1;}/* 释放资源 */SQLFreeHandle(SQL_HANDLE_DBC, hDbc);SQLFreeHandle(SQL_HANDLE_ENV, hEnv);return 0;}这个示例使用ODBC API连接到MySQL数据库,执行一个简单的SELECT查询,并打印结果。

odbc的写法 -回复

odbc的写法 -回复

odbc的写法-回复主题:ODBC的写法ODBC,即Open Database Connectivity(开放数据库连接),是一种应用程序编程接口(API),它允许应用程序访问不同数据源的数据。

ODBC 的写法是指在编写应用程序时如何使用ODBC接口来连接、查询和操作数据库。

本文将详细介绍ODBC的写法,包括连接数据库、执行SQL语句和处理查询结果等步骤。

第一步:ODBC数据源的配置在使用ODBC之前,需要先配置ODBC数据源,以便应用程序能够找到、连接和操作数据库。

可以通过以下步骤配置ODBC数据源:1. 打开ODBC数据源管理器:在Windows操作系统中,可以点击“开始”菜单,搜索“ODBC数据源”或“ODBC数据源管理器”来打开。

2. 选择数据源类型:在ODBC数据源管理器中,一般提供了文件DSN、用户DSN和系统DSN等不同类型的数据源。

选择适合自己的类型,并点击“添加”按钮。

3. 配置数据源属性:根据所选数据源类型,配置相应的属性,包括数据源名称、数据库所在位置、用户名和密码等。

根据具体情况填写这些属性,并点击“确定”完成数据源的配置。

第二步:连接数据库在应用程序中使用ODBC连接数据库需要以下步骤:1. 引入ODBC头文件:在你的程序中引入适当的ODBC头文件,如"sql.h"和"sqlext.h"。

2. 声明ODBC连接相关变量:声明一个ODBC环境句柄(HENV)、连接句柄(HDBC)和语句句柄(HSTMT)。

可以使用SQLAllocHandle函数来分配相应的句柄。

3. 连接数据库:使用SQLConnect函数来连接数据库。

传入数据库连接字符串、用户名和密码等参数,函数将返回一个连接句柄。

4. 检查连接状态:使用SQLGetConnectAttr函数来检查连接状态,以确保数据库连接成功建立。

第三步:执行SQL语句在建立数据库连接后,可以使用ODBC接口执行各种SQL语句来对数据库进行操作。

php 编译odbc

php 编译odbc

php 编译odbc1.引言1.1 概述概述部分的内容可以按照以下方式编写:概述部分的目的是为读者提供一个关于本文内容的简要介绍。

本文将重点探讨PHP编译ODBC的相关知识和技术,旨在帮助读者了解如何在PHP环境中使用ODBC进行数据库操作。

文章将首先介绍PHP和ODBC 的概念,然后讨论PHP编译ODBC的优势,并最终给出一个总结。

在本文中,我们将首先介绍PHP,即Hypertext Preprocessor的缩写,它是一种通用的开源脚本语言,尤其适用于Web开发。

PHP具有灵活的语法和丰富的功能,可以与多种数据库进行交互。

接着,我们将说明ODBC的概念和作用。

ODBC是一种开放的数据库连接标准,它允许应用程序通过标准的接口与多种数据库进行通信。

使用ODBC,开发人员可以编写通用的数据库代码,而不必担心底层数据库的不同。

在正文部分,我们将详细介绍PHP编译ODBC的过程和技术。

我们将探讨如何配置PHP以支持ODBC扩展,并说明在编译过程中可能遇到的一些常见问题和解决方案。

最后,在结论部分,我们将总结本文的主要内容,并强调PHP编译ODBC的优势。

我们将讨论使用PHP编译ODBC可以带来更高的性能和更好的数据库兼容性,并提供一些建议和注意事项。

通过阅读本文,读者将能够了解到如何在PHP环境中编译ODBC,从而在自己的项目中实现与各种数据库的无缝连接。

下面,让我们开始探索PHP编译ODBC的世界吧!1.2文章结构文章结构部分的内容可以包括以下信息:文章结构是指文章的整体组织框架,通过明确的结构可以使读者更加清晰地理解文章的内容和逻辑。

本文的结构主要包括引言、正文和结论三个部分。

引言部分主要介绍了本篇文章的背景和目的。

在概述中,可以简要介绍PHP编译ODBC的意义和作用,为读者理解文章提供一个整体的背景认知。

文章结构部分还可以说明引言部分的目的,即为读者提供一个了解本文内容和结构的引导。

正文部分是本文的核心内容,将详细介绍PHP和ODBC的相关知识。

11.3.1 ODBC API编程流程_Visual C++从入门到精通_[共4页]

11.3.1 ODBC API编程流程_Visual C++从入门到精通_[共4页]

240 由于SDK 包含了使用API 的必需资料,所以常把仅使用API 来编写Windows 应用程序的开发方式叫做“SDK 编程”。

而API 和SDK 是开发Windows 应用程序所必需的东西,所以其他编程框架和类库均以它们为基础,比如VCL 和MFC 。

11.3 ODBC API 编程本节视频教学录像:23分钟通过对本节的学习,你将学会如何通过ODBC 的API 函数对数据库进行访问。

11.3.1 ODBC API 编程流程用ODBC API 创建数据库应用程序的流程一般分为以下6步。

1. 连接数据源在使用ODBC 功能时必须先申请环境句柄,然后在环境句柄的基础上创建数据库连接,最后在数据连接的基础上执行SQL 语句。

因此,这一步须分配一个SQLHENV 类型的变量在ODBC 环境中做环境句柄使用,为数据源分配连接句柄,由ODBC API 函数SQLAllocConnect()申请连接句柄,用SQLConnect()把连接句柄与数据库连接。

此步可通过SQLSetConnectAttr()来设置连接属性。

该步用到的常用函数如下。

⑴ SQLALLocHandle()函数。

该函数用来申请句柄。

原型为:SQLRETURN SQLAllocHandle( SQLSMALLINT HandleType,SQLHANDLE InputHandle,SQLHANDLE * OutputHandlePtr);参数HandleType 的取值可以为SQL_HANDLE_ENV (环境句柄)、SQL_HANDLE_DBC (数据库连接句柄)或者SQL_HANDLE_STMT (SQL 语句句柄)。

InputHandle 为输入句柄,提 示:每次执行SQL 语句前都必须申请语句句柄,并且在执行完成后释放。

c语言之odbc编程指南

c语言之odbc编程指南

摘要本文在介绍了ODBC(开放性数据库连接,Open DataBase Co nnectivity)运行机制的基础上,着重讨论了VisualC++2.0下利用ODBC API及利用MFC进行ODBC编程的两种方法.关键词ODBC,SQL,数据源,文档/视图结构,DBMS一、ODBC的发展背景在传统的数据库领域,数据库应用程序通常是指在特定的数据库管理系统(DBMS)的支持下,用特定的内嵌式结构化查询语言(SQL)开发的.这样的数据库应用程序存在如下的缺点:(1)它往往需要一个庞大的数据库管理系统的支持,对用户的软、硬件要求高;(2)它通常只能处理一种格式的数据库文件.与传统的数据库应用程序的实现方法相比,Microsoft的开放性数据库连接(ODBC)标准则提供了一种新的途径:它建立了一组规范,并提供了一组高层应用程序调用接口和一套基于动态链接库(DLL)的运行支持环境.用这样一组接口规范开发的应用程序,使用标准的函数和结构化查询语言(SQL)对数据库进行操作,不必关心"数据源"(DataSourc e)来自何种数据库管理系统DBMS,所有的数据库的底层操作都是由相应的ODBC驱动程序(ODBCDriver)完成.只要有了相应的ODBC驱动程序,应用程序处理的对象-数据源就可以非常广泛,既可以是本机的某种数据库格式的文件,如FoxPro的*.dbf文件,也可以是远程数据库文件,如MicrosoftSQLServer等.二、ODBC的运行机制ODBC的体系构架包括五个部分:ODBC管理器(ODBCAdministrator)、应用程序(Application)、ODBC驱动程序管理器(ODBCDriver Mana ger)、ODBC驱动程序(ODBCDriver)和数据源(Data Source).图1表示了ODBC各部分之间的关系.ODBC管理器在整个ODBC运行机制中起配置环境、登录信息的作用,它被安装在Control Pannel里(ODBCINST.CPL).通过该工具,可以用来配置、增添和删除数据源,也可以用来删除、安装ODBC驱动程序.OD BC管理器把数据源和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 henvHDBChdbcHSTMThstmtint nColsSQLALLocEnv(&henv)/*环境申请,获得一个环境句柄*/SQLAllocConnect(henv,&hdbc)/*连接申请,获得数据库连接句柄*/SQLDriverConnect(hdbc,…)/*与具体的ODBC驱动程序和数据源联系*/SQLAllocStmt(hdbc,&hstmt)/*语句申请,获得一个语句句柄*/Input SQLStatement/*从用户接受SQL语句*/SQLExecDirect(hstmt,SQLStatement,…)/*执行SQL语句*/SQLNumResultCols(hstmt,&nCols)/*获取结果集中列数*/for each column{/*获得每列的信息,并与相应的C变量联系起来*/SQLDescribeCol(hstmt,col,ColName,…)/*获取当前列的信息*/ SQLBindCol(hstmt,col,…,variable,…)/*与相应变量联系起来*/}for each row{/*获取结果集中每行每列的数据,并作相应的处理*/SQLFetch(hstmt)/*将当前行的数据存储在SQLBindCol指定的变量中,当前行在结果集中后向下滚动一行*/foreach column{process field data from column variable}}SQLfreeStmt(hstmt,…)/*释放SQL语句句柄*/SQLDisconnect(hdbc)/*断开当前的连接*/SQLFreeConnect(hdbc)/*释放当前数据库连接句柄*/SQLFreeEnv(henv)/*释放环境句柄*/当编写C程序对ODBC数据库进行访问时,必须了解三个非常重要的概念:环境(environment)、连接(connection)、语句(statement).和其他的C语言Windows程序一样,它们都是通过句柄(handle)来访问的.首先需要一个环境句柄,如上面伪代码所示,它建立了应用程序与ODBC系统之间的联系,一个应用程序通常只有一个环境句柄.下一步需建立一个或多个链接,它建立了驱动程序与数据源之间的特定组合关系.如果在函数SQLDriverConnect(hdbc,…,strConnect ,…)中提供了如下的输入字符串,DSN=COMPONEN;FIL=FOXPRO2.6而且ODBC管理器中路径及配置正确的话,该函数就能自动建立起连接来.环境和连接获得后,最后还需要一个SQL语句来实施具体的数据库操作,它可以是如下形式的查询语句:SELECT NAME,AGE,SEX,GRADE FROMSTUDENT WHERE SEX=′F′也可以是如下的更新语句:UPDATE STUDENTSETAGE=′24′WHERE NAME=′JIANG QIN G SONG′四、利用MFC的C++语言ODBC编程VisualC++2.0对ODBCAPI进行了封装,封装后,最重要的数据库MFC类有CDatabase、CRecordset和CRecordView类.尤其是CRecordset类, 它一方面与CDatabase类的对象进行数据交换,另一方面又与CRecordView类进行数据交换,是CDatabase类和CRecordView类之间的桥梁.它们之间的作用关系如图2所示.实际上,CDatabase类的每个对象代表了一个数据源的连接,适宜于对数据源下的某个表格进行整体操作;CRecordset类的每个对象代表了记录的集合,这个集合是对指定数据表格按预定的查询条件获得的,它适宜于对所选的记录集合进行操作;CRecordView类的每个对象是与之相联系CRecordset类对象的外部表现形式,它的作用是把rdset类对象的变化以一些标准Windows控制的形式表现出来,是主要的用户界面.在应用编程时,根据问题的复杂程度和要求,可采用两种不同的方法来实现.如果仅仅是对某指定的数据库进行一些简单的操作,如向数据库中追加、删除、更改一些特定的记录等,并且不需要显示数据库的这些变化的话,就可以采用第一种方法,仅仅利用CDatabase类的相关功能来实现.这种方法只需两步就可完成:1.调用CDatabase类的打开(Open)函数,进行数据源的实际连接.2.调用CDatabase类的成员函数ExecuteSQL,执行一条SQL语句,实现特定的数据库操作.下面InsertRecord函数是实现向数据源compone n的表COMPONEN中插入一行记录,记录的TYPE字段的值为"pump"的最简代码.void InsertRecord(){CDatabase m-db;m-db.Open(NULL,FALSE,FALSE,″ODBC;DSN=componen″);m-db.ExecuteSQL(″insertinto COMPONEN(TYPE)value(′pump ′)″);m-db.Close();然而,在实际编程中,这种情况很少,多数数据库应用程序不仅要实现复杂得多的数据库操作,还需要显示变化了的数据库的情况,这样就需要用到VisualC++的文档/视图结构,需要CDatabase、CRecordset 、CRecordView和CDocument类之间相互配合来实现.下面以VisualC++2.0的AppWizard和ClassWizard产生的一个实际工程test.mak为例,说明这些类是如何相互作用的.工程test.mak的数据源是componen的COMPONEN表,该表的结构如表1所示.test.exe要实现的功能是按默认的条件查询COMPONEN表,滚动记录集,并在屏幕上显示当前记录集中的当前记录.有关的代码如下所示:表1COMPONEN的结构class CTestSet:public Crecordset{public:CTestSet(CDatabase*pDatabase=NULL);DECLARE-DYNAMIC(CTestSet)//{{AFX-FIELD(CTestSet,CRecordset)CStringm-NAME;CString m-CATALOGID;CStringm-SIZE;CStringm-ORDERID;CString m-PRODUCER;//}}AFX-FIELD//{{AFX-VIRTUAL(CTestSet)public:virtual CStringGetDefaultConnect();//Default connection stringvirtual CString GetDefault//default SQLfor Recordsetvirtual void DoFieldExchange(CFieldExchange*pFX);//RFX support//}}AFX-VIRTUAL……};CStringCTestSet::GetDefaultConnect(){return-T(″ODBC;DSN=componen;″);}CStringCTestSet::GetDefaultSQL(){return-T(″COMPONEN″);}void CTestSet::DoFieldExchange(CFieldExchange*pFX){//{{AFX-FIELD-MAP(CTestSet)pFX->SetFieldType(CFieldExchange::outputColumn);RFX-Text(pFX,″NAME″,m-NAME);RFX-Text(pFX,″CATALOGID″,m-CATALOGID);RFX-Text(pFX,″SIZE″,m-SIZE);RFX-Text(pFX,″ORDERID″,m-ORDERID);RFX-Text(pFX,″PRODUCER″,m-PRODUCER);/*以下是参数连接部分,m-nParams必须先被赋值为2.这段代码仅仅是为了说明如何参数化查询条件而设置,test.mak中没有这几行代码.pFX->SetFieldType(CFieldExchange::param);RFX-Text(pFX,″NAMEParam″,m-strNAMEParam,20);RFX-Text(pFX,″CATALOGIDParam″,m-strCATALOGIDParam,10);*///}}AFX-FIELD-MAP}class CTestDoc:public Cdocument{……public:CTestSet m-testSet;public:……};class CTestView:public CRecordView{……public://{{AFX-DATA(CTestView)enum{IDD=IDD-TEST-FORM};CTestSet*m-pSet;//}}AFX-DATA//Attributespublic:CTestDoc*GetDocument();……public://{{AFX-VIRTUAL(CTestView)public:virtual CRecordset*OnGetRecordset();protected:virtual void DoDataExchange(CDataExchange*pDX(;//DDX/DDVsupportvirtual void OnInitialUpdate();//called firsttime after construct//}}AFX-VIRTUAL};void CTestView::DoDataExchange(CDataExchange*pDX){CRecordView::DoDataExchange(pDX);//{{AFX-DATA-MAP(CTestView)DDX-FieldText(pDX,IDC-EDIT-CATALOGID,m-pSet->m-CATALOGID,m-pSet);DDX-FieldText(pDX,IDC-EDIT-NAME,m-pSet->m-NAME,m-pSet);DDX-FieldText(pDX,IDC-EDIT-ORDERID,m-pSet->m-ORDERID,m-pSet);DDX-FieldText(pDX,IDC-EDIT-PRODUCER,m-pSet->m-PRODUCER,m-pSet);DDX-FieldText(pDX,IDC-EDIT-SIZE,m-pSet->m-SIZE,m-pSet);//}}AFX-DATA-MAP}CRecordset*CTestView::OnGetRecordset(){return m-pSet;}CTestDoc*CTestView::GetDocument(){ASSERT(m-pDocument->IsKindOf(RUNTIME-CLASS(CTestDoc)));return(CTestDoc*)m-pDocument;}void CTestView::OnInitialUpdate(){m-pSet=&GetDocument()->m-testSet;CRecordView::OnInitialUpdate();}分析以上代码要从CTestView类开始.依照VC标准的文档/视图结构的相互作用关系,记录视图类CRecordView的导出类CTestView,在显示前要调用它的成员函数OnInitialUpdate(),弄清函数CTestView::O nInitialUpdate()在这里的行为是理解整个代码的关键.下面是CTest View::OnInitialUpdate()函数调用关系图:CTestView::OnInitialUpdate()CRecordView::OnInitialUpdate()//调用基类的OnInitialUpdate()函数CTestView::OnGetRecordset()//得到一个CRecordset类的指针CRecordset::Open()//利用前面得到的指针访问Open函数CTestSet::GetDefaultConnect()//得到默认连接字符串CDatabase::Open()//利用默认连接字符串与数据源连接CTestSet::GetDefaultSQL()//得到默认SQL语言,执行它CFormView::OnInitialUpdate()//调用CForm View::OnInitial UpdateCTestView::DoDataExchange()//与Windows编辑控制联系起来通过以上分析,我们知道,表面上只有CRecordset、CRecordView和CDocument类的导出类之间相互作用,实际上,由于CRecordset::Ope n()函数要构造一个CDatabase类指针,并通过默认连接字符串与特定的数据源连接,仍然是四个类之间相互作用的,只不过是VC的标准框架将这种关系封装起来罢了.补充说明几点:·对当前记录集中当前记录的滚动功能,应用程序中不需要任何代码支持,VC的标准框架默认实现了.·CRecordset::Open()是如何构造一个完整的SQL查询语句、如何理解CRecordset类工作机制的关键.一个完整的SQL查询语句具有下面的普遍形式:SELECT[ALL|DISTINCT]columnlist FROMtablelist[WHEREsearchcondition][ORDER BYcolumnlist[ASC|DESC]][]内的内容表示是可选的,|表示"或者".CRecordset::Open()构造这样的SQL查询语句的伪代码如下所示:CRecordset::Open(…,lpszSQL…){IF(lpszSQL!=NULL)strSQL=lpszSQLELSEstrSQL=CRecordSet::GetDefaultSQL()IF(strSQL不以"SELECT"或"CALL}"开头){strSQL="SELECTcolumnlist FROMtablelist"其中,columnlist与CRecordSet::DoFieldExchange()中列名保持数量和顺序上的一致;tablelist是前面strSQL的值}IF(m-strFilter!=NULL)strSQL+="WHERE"+m-strFilterIF(m-strSort!=NULL)strSQL+="ORDER BY"+m-strSort}其中,strSQL是保存SQL语句的变量、m-strFilter、m-strSort是CRecordSet类的公有成员变量.CRecordSet类对象中包含的数据就是符合strSQL中查询条件的记录的集合.·程序可以动态改变SQL语句中的查询条件,即参数化WHERE字句和ORDERBY字句.在变量m-strFilter、m-strSort中将要参数化的部分以"?"代替.在调用打开函数CRecordSet::Open()前(如在构造函数中) ,将参数变量的个数赋值给变量m-nParams,并在CRecordSet::DoField Exchange()中按参数出现的先后顺序定义好,如CTestSet::DoFieldEx change()代码中注释部分所示.五、结束语从以上讨论中可知,ODBC应用程序与传统的数据库应用程序相比, 确实有自己独特的优点,它不仅编程接口十分简单方便,更主要的是它的运行机制非常适合与应用程序的其他功能完美地融合.笔者最近利用了ODBC技术,通过ODBC系统读取FoxPro2.6数据库文件中的记录,能够实现液压原理图中元件明细表的自动填充功能,非常方便快捷.。

实验4 ODBC编程

实验4  ODBC编程

实验3 ODBC编程1.实验目的与要求(1)了解C/S结构的应用系统设计与实现的全过程。

(2)学会开发工具与数据库互连的方法。

(3)能使用开发工具操纵数据库。

2.实验环境要求(1)服务器端 SQL Server 2005(2)客户端 VC6.0(3)服务器端与客户端网络互连3.实验内容利用已有的“教师授课管理数据库”,建立“教师授课管理系统”。

(1)维护“教师授课管理数据库”对“教师授课管理数据库”,检查所有的表的相关约束设置,并准备好部分数据(注意:各表中的数据必须符合约束规则)。

(2)开发客户端数据库应用程序1)划分应用程序的功能模块图书销售管理系统可以由五个模块组成,各模块的功能如下:a)教师管理教师信息查询增加教师删除教师修改教师信息b)学生管理学生信息查询增加学生删除学生修改学生信息c)课程管理课程信息查询增加课程删除课程修改课程信息d)教师授课管理教师授课信息查询增加教师授课信息删除教师授课信息修改教师授课信息e) 学生选课及成绩管理学生选课学生成绩录入学生成绩查询f)数据管理数据备份数据恢复要求:列出各子功能模块所涉及到的表,并说明对表所做的操作。

2)应用程序的实现各功能模块均由函数实现,在主函数中,建立一个主菜单列表,由用户选择要实现的功能,调用相应的功能函数。

主函数如下:int main(){int k;while(1){cout<<'\n';cout<<'\n';cout<<" *****************************"<<'\n';cout<<" 1.教师管理"<<'\n';cout<<" 2.学生管理"<<'\n';cout<<" 3.课程管理"<<'\n';cout<<" 4.教师授课管理"<<'\n';cout<<" 5.学生选课及成绩管理"<<'\n';cout<<" 6.数据管理"<<'\n';cout<<" 7.退出"<<'\n';cout<<" *****************************"<<'\n';cout<<" 请选择1~7:"<<'\n';cin>>k;if(k==6)break;switch(t){case 1: teachermanage (); //调用教师管理函数break;case 2: studentmanage(); //调用学生管理函数break;case 3: coursemanage(); //调用课程管理函数break;case 4: teachingmanage(); //调用教师授课管理函数break;case 5: grademanage(); //调用学生选课及成绩管理函数break;case 6: datamanage(); //调用数据管理函数break;default: break;}}return 0;}实现要求:1)每位同学至少要完成teachermanage ()、studentmanage()、coursemanage()、teachingmanage()和grademanage()五个功能模块函数中的一个的编写;2)在各功能模块中,自行设计子菜单,按不同要求完成对数据库中的数据操作:显示、查找、删除、修改等;3)与数据库的连接和断开单独用函数实现。

编程实例——ODBC篇

编程实例——ODBC篇

达梦接口编程实例——ODBC篇ODBC(Open Database Connectibvity)是被人们广泛接受的用于数据库访问的标准API(应用程序编程接口)。

对于数据库API,它以X/Open和ISO/IEC的Call-Level Interface(CLI)规范为基础,并使用结构化查询语言(SQL)作为其数据库访问语言。

结构化查询语言SQL是一种用来访问数据库的语言。

通过使用ODBC,应用程序能够使用相同的源代码和各种各样的数据库交互。

这使得开发者不需要以特殊的数据库管理系统DBMS为目标,或者了解不同支撑背景的数据库的详细细节,就能够开发和发布客户/服务器应用程序。

达梦数据库(DM DATABASE,以下简称DM)的DM ODBC 3.0遵照Microsoft ODBC 3.0规范设计与开发,实现了ODBC应用程序与DM的互连接口。

用户可以直接调用DM ODBC 3.0接口函数访问DM,也可以使用可视化编程工具如Visual C++、C++ Builder、PowerBuilder等利用DM ODBC 3.0访问DM。

本文中以武汉达梦数据库公司的DM ODBC 3.0驱动程序为实例,以Visual C++为工具,在Windows 2000 Professional操作系统上,用一个实例来介绍DM ODBC的编程方法。

1、创建DM ODBC数据源在DM客户端软件安装过程中,如果选择了安装ODBC驱动程序的相关选项,安装工具可完成将DM ODBC 3.0驱动程序复制到硬盘,并在Windows注册表中登记DM ODBC驱动程序信息的工作。

在使用DM ODBC方法访问一个DM数据库服务器之前,必须先对自己的应用程序所用的ODBC资源进行配置。

在客户机上配置DM ODBC资源的步骤如下:1.1依次打开控制面板-管理工具-数据源(ODBC),显示ODBC数据源管理器对话框,如图1.1.1所示。

图1.1.1 ODBC数据源管理器对话框1.2设置和配置一个系统DSN,请单击系统DSN标签,单击添加按钮增加一个新的DSN,显示如图1.1.2所示的对话框。

第10章ODBC编程

第10章ODBC编程

10.2.2 ODBC API



ODBC是100年代末90年代初出现的技术,它为编写关 系数据库的客户软件提供了统一的接口。ODBC只提供 单一的API,可用于处理不同数据库的客户应用程序。 使用ODBC API的应用程序可以与任何具有ODBC驱动 程序的关系数据库进行通信。 由于ODBC为关系数据库提供了统一的接口,现在已经 被广泛应用,并逐渐成为关系数据库接口的标准。 ODBC仅限于关系数据库,由于ODBC的关系型特性, 很难使用ODBC与非关系数据源进行通信,例如对象数 据库、网络目录服务、电子邮件存储等。





10.2.5 VC,C#数据库编程
An Introduction to Database System
10.2.1 数据库访问技术概述

DBMS是非常复杂的软件,编写程序通过 某种数据库专用接口与其通信是非常复 杂的工作,为此,产生了数据库的客户 访问技术,即数据库访问技术。
An Introduction to Database System





10.2.6 VC,C#数据库编程
An Introduction to Database System
10.2.6 VC,C#数据库编程

ODBC MFC演示:demo
An Introduction to Database System
10.2 数据库访问技术

10.2.1 数据库访问技术概述
10.2.2 ODBC API 10.2.3 ODBC的MFC类 10.2.4 DAO 10.2.5 OLE DB与ADO





10.2.5 VC,C#数据库编程

使用ODBCAPI连接数据库课案

使用ODBCAPI连接数据库课案

主要内容:ODBC API的体系结构使用ODBC API开发数据库应用程序的一般步骤使用函数SQLAllocHandle分配句柄使用函数SQLConnect、SQLDriverConnect、SQLBrowseConnect 连接数据源使用函数SQLPrepare和SQLExecute执行SQL语句使用函数SQLBindCol()绑定数据库字段使用函数SQLGetDiagRec和SQLGetDiagField处理错误使用函数SQLFetch移动数据库记录指针使用ODBC API 进行事务处理使用函数SQLDisconnect断开数据源的连接目录ODBC API 基础 (3)ODBC API句柄 (3)ODBC数据类型 (5)ODBC诊断 (5)使用ODBC API变成建立应用程序 (7)ODBC API编程模型概述 (7)连接数据库 (10)准备并执行SQL语句 (14)获取记录集 (16)记录的添加、删除和更新 (18)错误处理 (20)事务处理 (21)断开数据源连接并释放环境句柄 (23)ODBC API 基础ODBC API句柄ODBC API 实现数据库操作的手段是句柄。

在ODBC中,使用不同的句柄(HANDLE)来标志环境(environment)、连接(Connection)、语句(statement)、描述符(description)等。

句柄是一个应用程序变量,系统用它来存储关于应用程序的上下文信息和应用程序所用到的一些对象。

1、环境句柄环境是存取数据的全局性背景,与环境相关的是全局的所有信息。

例如:环境状态、当前环境状态诊断、当前在环境上分配的连接句柄、每个环境属性的当前设置。

在实现ODBC的一段代码(Driver Manager或者驱动程序)中,环境句柄标识包含这个信息的结构。

环境句柄在ODBC应用程序中不经常用。

他们经常用来调用SQLDataSources和SQLDrivers,又是用来调用函数SQLAllocHandle、SQLEndTran、SQLFreeHandle、SQLGetDiagField和SQLGetDiagReg。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ODBC API数据库编程开发
1、通常数据库开发人员将标准的SQL语句发送给ODBC驱动程序,再由ODBC的驱动程序将这个SQL语句映射成数据库可以支持的SQL语句
2、ODBC API是独立于DBMS和操作系统的,而且与编程语言无关
3、ODBC API开发数据库应用程序需经过如下步骤:
A、连接数据源
B、分配语句句柄
C、准备并执行SQL语句
D、获取结果集
E、提交事务
F、断开数据源连接并释放环境句柄
4、步骤细化
A、连接数据源
a、为了连接数据源,必须要建立一个数据源连接的环境句柄。

句柄:是指向一个特殊结构的指针
环境:驱动程序管理器需要为该驱动程序存储的有关系统和数据源的一般信息
环境句柄:即一个指向保存数据源信息的结构体的指针
此环境句柄通过SQLAllocHandle函数或者SQLAllocEnv函数分配获得
HENV henv;
RETCODE rcode;
rcode = ::SQLAllocEnv(SQL_HANDLE_ENV, SQL_NULL, &henv);
if (rcode == SQL_SUCCESS) // 环境句柄创建成功
b、完成环境句柄创建后,还需要建立一个连接句柄。

通过SQLAllocConnect函数创建
HDBC hdbc;
rcode = ::SQLAllocConnect(henv, &hdbc);
if (rcode == SQL_SUCCESS) // 连接句柄创建成功
c、在上两步的基础之上就可以进行实际数据源的连接。

连接函数是SQLConnect
rcode = ::SQLConnect(hdbc,
(PUCHAR)pszSourceName, SQL_NTS,
(PUCHAR)pszUserId, wLengthUID,
(PUCHAR)pszPassword, wLengthPSW);
if (rcode == SQL_SUCCESS) // 数据源连接成功
注:有时候ODBC数据源并非事先在PC里建立好的,这时需要应用程序动态创建ODBC 数据源。

创建函数为SQLConfigDataSource
B、分配语句句柄
由于ODBC的SQL还携带了一些属性信息,用于定义数据源连接的上下文,有些语句要求特殊的参数以便能够执行,因此,每个语句都有一个指向定义语句所有属性结构的句柄(也称之为语句句柄),通过SQLAllocStmt实现。

HSTMT hstmt;
rcode = ::SQLAllocStmt(hdbc, &hstmt);
if (rcode == SQL_SUCCESS) // 语句句柄创建成功
C、准备并执行SQL语句,有两种方法
第一种:使用SQLExecDirect函数,可以一次执行一个SQL语句
LPCSTR pszSQL;
strcpy(pszSQL, "SELECT * FROM table_name");
rcode = ::SQLExecDirect(hstmt, (UCHAR*)pszSQL, SQL_NTS);;
if (rcode == SQL_SUCCESS) // 语句执行成功
第二种:使用SQLPrepare函数和SQLExecute函数,多次执行同一条语句(即调用一次
SQLPrepare函数,然后调用若干次SQLExecute函数)。

显然第一种效率较高
LPCSTR pszSQL;
strcpy(pszSQL, "SELECT * FROM table_name");
rcode = ::SQLPrepare(hstmt, (UCHAR*)pszSQL, SQL_NTS);
if (rcode == SQL_SUCCESS) // 语句准备成功
{......}
rcode = ::SQLExecute(hstmt, (UCHAR*)pszSQL, SQL_NTS);
//注:多次在SQL语句中体现if (rcode == SQL_SUCCESS) // 语句执行备成功
D、获取结果集
SQL语句执行成功后,应用程序必须准备接收数据。

应用程序需要把SQL语句执行结果绑定到一个本地缓存变量里。

但是SQL执行的结果并非直接传送到这个变量中,而是在应用程序准备接收数据时通知驱动程序其已经准备好接收数据,应用程序通过调用SQLFecth函数结果集的一行数据。

由于返回的数据是存放在表结构的列中的,因此应用程序必须调用SQLBindCol函数绑定这些列。

通常接收结果集时需一次进行以下操作:
●返回列的个数,通过执行SQLNumResultCols函数
●给出列中数据的有关信息,如列名称、数据类型等,执行SQLDescribeCol函数
●把列绑定到应用程序的变量里(一般定义为结构体),执行SQLBindCol函数
●获取数据,执行SQLFetch函数
●获取长数据,执行SQLGetData函数
此过程代码如下:
rcode = ::SQLNumResultCols(hstmt, &wColumnCount);
if (rcode != SQL_SUCCESS) // 列举结果集的个数不成功
{// 释放操作}
LPSTR pszName;
UWORD URealLength;
SWORD wColumnCount;
UWORD wColumnIndex = 0;
SWORD wColumnType;
UDWORD dwPrecision;
SWORD wScale;
SWORD wNullable;
rcode = ::SQLDescribeCol(hstmt,
wColumnIndex, // 列的索引
pszName, // 列的名称
256, // 存放列名称的缓冲区大小
& nRealLength, // 实际得到列名称的长度
&wColumnType, // 列的数据类型
&dwPrecision, // 精度
&wScale, // 小数点位数
&wNullable ); // 是否允许空值
if (rcode !=SQL_SUCCESS) // 执行不成功
{// 释放操作}
rcode = ::SQLBindCol(hstmt,
uCounter, // 列索引
wColumnType, // 列数据类型
FieldValue, // 绑定的变量
dwBufferSize, // 变量内存大小
&BytesInBuffer); // 存放将来返回数据的大小的变量)
if (rcode != SQL_SUCCESS) // 执行不成功
{// 释放操作}
::SQLFetch();
// 此后可以从绑定的结构体变量里读取列的值
E、提交事务
当所有SQL语句都被执行完后,需要调用SQLEndTran函数提交或者回退事务如果提交方式为手工(应用程序设置)方式,则需要应用程序执行这个语句以提交或者回退事务,如果是自动方式,当SQL 语句执行后,该命令自动执行。

:: SQLEndTran(SQL_HANDLE_DBC , hdbc, SQL_COMMIT); // 提交事务
:: SQLEndTran(SQL_HANDLE_DBC , hdbc, SQL_ROLLBACK); // 会退事务
F、断开数据源连接并释放环境句柄
当应用程序使用完ODBC以后,需调用SQLFreeHandle函数释放所有语句句柄、连接句柄、环境句柄(注意释放顺序为逆序)。

先释放语句句柄、再调用SQLDisconnect函数解除与数据源的连接、再次调用SQLFreeHandle函数释放连接句柄、最后释放环境句柄。

注意:所有API函数的调用需要包含“sqltypes.h”、“sql.h”、“sqlext.h”头文件。

相关文档
最新文档