使用ODBC API访问数据库

为了存取ODBC数据源,应用程序应该包含以下的步骤:
1.连接ODBC数据源
要求给定ODBC数据源名称以及其他一些必要的信息。
在应用程序调用ODBC函数之前,必须初始化ODB接口,建立一个环境句柄。首先声明一个环境句柄变量,如:
Dim hEnv1 as Long
如果使用的是ODBC 2.X,那么调用函数SQLAllocEnv,并把环境变量以引用传递的方式传给该函数。驱动程序管理器将初始化ODBC环境,为环境句柄分配存储空间,并返回一个环境句柄,如:
SQLAllocEnv(hEvn1)
如果使用的是ODBC 3.X,那么参数SQL_NULL_EVN调用函数SQLAllocHandle,如:
SQLAllocHandle (SQL_HANDLE_ENV,SQL_NULL_HANDLE,hEnv1)
以上步骤在一个应用程序中只能进行一次。但在一个ODBC环境中可以连接多个数据源。下面就来看如何连接数据源。
在连接数据源之前,应用程序先分配一个或多个连接句柄。首先声明一个连接句柄变量,如:
Dimn hDbc1 as Long
如果使用的是ODBC 2.x,那么调用函数SQLAllocConnect,并把连接句柄变量以引用传递的方式传给该函数。驱动程序管理器为该连接分配一块储存空间,并返回一个连接句柄,如:
SQLAllocConnect(hEnv1,hDbc1)
如果使用的是ODBC 3.x,那么用参数SQL_HANDLE_DBC和环境句柄来调用函数SQLAllocHandle,如:
SQLAllocHandle(SQL_HANDLE_DBC,hEnv1,hDbc1)
现在就可以指定驱动程序和数据源了,并且用函数SQLDriverConnect来连接指定的数据源。如:

2.处理SQL语句
(1)应用程序把SQL语句字符串放入一个缓冲区。如果这个SQL语句含有参数,还应该设置参数值。
(2)如果SQL语句返回一个结果集,还要为该语句早班一个游标名。
(3)应用程序以“准备”或“立即执行”的方式提交SQL语句。
(4)如果SQL语句建立一组结果集,应用程序可以查询结果的属性,例如列数、列的数据类型等。为每一列连接一个缓冲并提取结果。
(5)如果SQL语句产生错误,则提取错误信息并采取相应的措施。
在处理SQL语句之前,首先必须分配一个语句句柄。先声明一个语句句柄变量,如:
Dim hStmtl as ling
如果使用是的ODBC 2.X,那么调用函数SQLAllocStmt,如:
SQLAllocStmt1(hDbc1,hStmt1)
如果使用的是ODBC 3.X,那么用参数SQL_HANDLE_STMT和参数hDbc1调用函数SQLAllocHandle,如:
SQLAllocHandle(SQL_HANDLE_STMT,hDbc1,hstmt1)
接下来就可以执行SQL语句了,如果采用“准备”方式执行sql语句,应用程序要做如下步骤:
(1)调用SQLPrepare函数准备一个SQL语句,把SQL语句作为函数的一个参数,例如:
SQLPrepare(hStmt1,"Select Name,Age From Employee Where AGE=?",SQL_NTS)。
(2)设置SQL语句中的参数值。如果SQL语句中出现了问号(?),那么表明这个SQL语句是带参数的,如:
SQLBindParameter(hStmt1,1,SQL_Param_INPUT),
SQL_C_Clong.SQL_INTEGER,0,0,age,0 name,vbNull).
这样每次查询后,Name字段值就存放在变量name中。
(3)调用函数SQLExecute来执行SQL语句。如:SQLExecute(hStmt1)
(4)提取查询结果.这个任务由函数SQLFetch来完成,如SQLFetch(hStmt1).
(5)根据程序需要,可有选择地进行这五个步骤.
如果是采用"立即执行"方式执行SQL语句,那么省去上面的第一步,在执行SQL语句时,用函数SQLExecuteDirect.如:

但是就速度而言,"准备"方式比"立即执行"方式要快,因此,只在下面情况下,考虑使用"立即执行"方式:
(1)应用程序的SQL语句只执行一次;
(2)应用程序在执行前不需要查询有关结果信息.
3.结束事务
可以提交事务,也可以撤销事务。有两种提交事务的模式:一种是自动模式,另一种是手动模式。
在自动模式下,每个SQL语句都被认为成一个完整的事务而自动提交。在手动模式下,事务由一个或几个SQL语句组成,如果应用程序提交一个SQL语句时没有活动事务,驱动程序就建立一个新的事务,在后续的SQL语句提交过程中,驱动程序保持这个处于活动的事务,直到应用程序调用函数SQLTransact(ODBC2.X)或SQLENDTRAN(ODBC 3.X)进行事务提交或撤消。
如果驱动程序支持SQL_AUTOCOMMIT连接选项,则缺省的事务模式是自动提交模式;如果不支持SQL_AUTOCOMMIT连接选项,则缺省的事务模式是手动模式。应用程序可以调用函数SQLSetConnectOption(ODBC2.X)或SQLSetconnectAttr(ODBC3.X)进行自动/手动提交模式切换。在进行模式交换时,驱动程序将自动提交当前连接中的所有活动事务。
应用程序应该用函数SQLTransact或SQLEndTrans来处理事务,而不要用SQL语句中的COMMIT或ROLLBACK来处理事务,COMMIT或ROLLBACK语句的结果取决于驱动程序及相连接的数据源。
注意:不管是用自动模式还是用手动模式处理事务,也不管是提交事务还是撤销事务,只要是事务处理都将引起数据源关闭游标并删除与该数据源有关的所有存储计划。
4.中断连接
在完成对数据库的存取后,中断与数据源的连接。
用函数SQLDisconnect来中断与数据源的连接。例如,下面的语句中断连接句柄hDbc1所指的数据源连接。
SQLDisconnect(hDbc1)
在中断连接后,必须释放所有的句柄,包含语句句柄、连接句柄和环境句柄。
当使用ODBC2.X时:
(1)释放语句句柄,用函数SQLFreestmt,如SQL_DROP;
(2)释放连接句柄,用函数SQLFreeConnect,如SQLFreeConnect(hDbc1);
(3)释放环境句柄,用函数SQLFreeEnv,如SQLFreeEnv(hEnv1)。
当使用ODBC3.XJF ,释放连接句柄和环境都用函数SQLFreeHandle,只不过带的参数不同。当释放连接句柄时,用参数SQL_HANDLE_DBC;当释放环境句柄时,用参数SQL_HANDLE_ENV。如果释放语句句柄时用SQL_DROP,那么,也使用SQLFreeHandle函数,参数改为SQL_HANDLE_STMT,否则和ODBC2.XG一样使用SQLFreeStmt.

时间: 2024-10-28 02:32:13

使用ODBC API访问数据库的相关文章

通过ODBC API实现对数据库的访问

自从初次接触到vckbase,在里面学了很多东西,这跟大家无私的奉献是离不开的.在数据库方面的技术文章中,很多篇幅是用来介绍ADO或者DAO的访问方式,而关于用ODBC API访问数据库的文章却少之又少.虽然用ODBC访问数据库比较麻烦,但却很灵活,效率高,又便于了解ADO.DAO的底层封装方式,对提升整体软件思想是很有好处的. 现在就数据库的操作类型来谈谈ODBC API的使用. 1.配置数据源.例: SQLRETURN retcode; Retcode = SQLConfigDataSour

使用Java Persistence API修改数据库表行

有关如何使用 NetBeans IDE 的更多信息,请参阅 NetBeans 网站上的 支持和文档. 本文将使用以下技术和资源 JavaServer Faces 组件/ Java EE 平台 1.2/Java EE 5* Travel 数据库 不是必需的 阅读本文的前提条件本文是本系列文章(共两篇)的第二部分.您应该已经阅读了 在 Visual Web 应用程序中使用 Java Persistence API 这篇文章,并且创建了其中所描述 的两个项目以及一些不同的类和网页.第一篇文章提供了建立

ap plet中应用JDBC访问数据库

  ap plet是用Java语言编写的小应用程序,它能够嵌入在HTML中,并由WWW浏览器来解释执行.但是,如何在ap plet中处理Internet世界中大量的数据和分布在网络各个角落的各种各样的资源呢?这就要使用JDBC. 一. JDBC的工作原理 JDBC(Java DataBase Connectivity)是用于执行SQL语句的Java应用程序接口,由一组用Java语言编写的类与接口组成.JDBC是一种规范,它让各数据库厂商为Java程序员提供标准的数据库访问类和接口,这样就使得独立

学习ADO和ODBC访问数据库的一些思路整理

ado|odbc|访问|数据|数据库 最近一直在学习研究用vc++访问数据库的问题,使用过ADO,也使用过ODBC.就这两种连接数据源的接口都有好几种方式,可以利用database,也可以利用dataset.利用这个word把我学习的思路整理一下. 一.使用ADO连接数据源 一般来说当建立基于对话框的应用程序时,都选择使用ADO比较方便(这纯属个人习惯问题). 1.直接在应用程序中建立与数据库的connection 2.自己写一个ADOConnection类作为应用程序操作数据库的接口,这样操作

怎么通过实时数据库自带.NET API访问实时数据库?

问题描述 怎么通过实时数据库自带.NET API访问实时数据库? 怎么通过实时数据库自带.NET API访问实时数据库?这个实时数据库自带的API具体都有什么功能?好像需要安装Aspen提供的库文件,这个库文件又是啥? 解决方案 你用的是什么实时数据库,它一般提供了com或者dll等编程接口,每个数据库都不一样. 解决方案二: 一个是可以通过C形式的dll调用,C#这里使用dllimport导入,直接调用 一个是使用opc接口,这个有专门的控件. 解决方案三: 不需要头文件.lib文件,只要dl

ODBC API常用函数诠释

odbc|函数 ODBC API常用函数诠释记得kony曾经在我的这个坛子上转过一个帖子,解释使用ODBC数据源来连接数据库进行数据库操作速度慢的原因,同时那个帖子也提出了提高ODBC数据源连接数据库进行数据库操作速度的两个办法,一个是利用Visiual Basic中的RDO组件,一个就是直接调用odbc api函数进行相关数据库操作,应答应过这里的弟弟妹妹们写点关于ODBC API函数方面的东东,所以只能赶鸭子上架了:      以下为ODBC API的常用十四个函数,先列出在PowerBui

Java访问数据库的速度瓶颈问题的分析及解决

访问|解决|数据|数据库|速度|问题 内容: 速度瓶颈问题的提出 JDBC访问数据库的机制 不同模式的JDBC接口的选择 Java程序中SQL语句格式的优化 软件模型中对数据库访问的设计模式的优化 将深入研究的问题 参考资料 关于作者 FoolsGarden@SMTH 自由Java传道士 2001 年 11 月 速度瓶颈问题的提出 在企业级的Java应用中,访问数据库是一个必备的环节.数据库作为数据资源的集散地,往往位于企业级软件体系的后方,供前方的应用程序访问.在Java技术的体系中,应用程序

odbc api是什么

ODBC API是一套复杂的函数集,可提供一些通用的接口,以便访问各种后台数据库.对现今的客户机/服务器应用程序来说,每个数据库系统都有各自的接口,例如SQL Server,Oracle,DB2和Infomix等各种数据库系统提供的接口就完全不一样.对程序员来说,这是一件非常头疼的事. ODBC的出现成为一件大喜事,在添加了一个附加层之后,用户只需要学习和掌握一套函数集,随后就可以直接使用任何数据库系统的大多数特性.但是,不要认为ODBC提供了一个统一的接口,同时也提供了简便的操作.事实上,OD

JAVA访问数据库之概述

JAVA类库中包含一组用于访问数据库的接口和类,作为开发数据库应用程序的API.这些接口和类统称为JDBC(Java DataBase Connectivity),JDBC是访问数据库的类和接口的结合.对于数据库的操作,在整个Java学习过程中至关重要. JDBC简介 JDBC提供了连接各种常用数据库的能力.有了JDBC,访问数据库就是一件很容易的事,有了JDBC,就不必为访问Sysbase数据库和Oracle数据库来专门写一个程序.程序员只需要JDBC API写一个程序就可以了,它可以向相应的