ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:20.13KB ,
资源ID:11535300      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11535300.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ODBC编程.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ODBC编程.docx

1、ODBC编程ODBC编程的有关知识ODBC是一个函数级接口标准,它为C/C+、BASIC等高级程序设计语言开发应用程序提供了访问各种数据源的统一标准。一、ODBC的基本概念1、什么是ODBC开放式数据库互连(OpenDatabase Connectivity,ODBC)是微软公司开放服务体系中有关数据库的一个组成部分,它建立了一组规范并提供一组访问数据库的标准API。ODBC提供了设计、开发独立于DBMS的应用能力。应用程序可以利用SQL来完成其大部分数据库访问任务,有助于实现应用程序和数据库的分离。提高应用系统的数据访问透明性和可移植性。2、ODBC的结构ODBC通过驱动程序提供数据独立性。

2、驱动程序与具体的数据库有关,但基于ODBC的应用程序对数据库的操作不依赖于任何DBMS,也不直接与DBMS交互,所有的数据库操作由对应数据库服务器的ODBC驱动程序完成。也就是说,不论何种数据库,均可以通过ODBC API进行访问。 驱动程序管理器 驱动程序 图10.1 VB应用程序和底层数据库的关系 用户应用程序 ODBC API ODBC Driver Manager ODBC Access SQL Server 其他数据库 Driver1 Driver2 Driver2(1)应用程序 (Application):定义了系统的应用逻辑,负责和用户的交互管理,它调用ODBC函数向数据库库服务

3、器提交数据访问请求,获取结果并返回给用户。 (2)ODBC 管理器 (ODBC manager),它为应用程序加载和调用ODBC驱动程序,负责应用程序和驱动程序的交互控制。但应用程序需要执行ODBC函数时,它会根据应用程序提供的连接数据源找到它相应的驱动程序,并将驱动程序中同名的函数和应用程序绑定。ODBC管理器由Microsoft提供,该程序位于WINDOWS控制面板的32位ODBC内,包含在 ODBC32.dll中,对用户是透明的。主要任务是管理ODBC的驱动程序和数据源。(3)ODBC 驱动程序(ODBC Drivers),它是一些DLL,提供 ODBC32和数据库之间的接口。应用程序最

4、终调用驱动程序提供的函数操作数据库。在一个程序内要操作不同类型的数据库需要加载不同的ODBC 驱动程序。驱动程序完成数据库访问请求的提交和结果集接收,应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据。Microsoft随他们的产品提供了好几种。并且你总可从数据库提供商那里获得新的ODBC 驱动程序。只要简单地安装新的ODBC驱动程序,你的机器就可使用新的它以前不知道的数据库。(4)数据源 (Data SourcES,数据库):包含数据库的位置和数据库类型等信息,实际上是一种数据连接的抽象。3、ODBC句柄 应用程序运行后,为维护执行的状态,ODBC 管理器和ODBC 驱动程序中必须

5、保持足够的控制信息。应用程序要求ODBC 管理器和ODBC 驱动程序为ODBC环境、每个连接以及每个SQL语句分配描述/控制信息存储空间,并返回指向各个存储区的句柄供其使用。(1)环境句柄:整个ODBC上下文的根句柄。标识全程数据访问控制信息的内存结构,包括有效连接句柄以及当前活动连接句柄。ODBC将环境句柄定义为HENV类型的变量。应用程序使用单一的环境句柄,在连接到数据源以前必须申请该句柄。(2)连接句柄:管理有关数据库会话的所有信息。连接句柄标识每个特定的连接信息的内存结构。ODBC将环境句柄定义为HDBC类型的变量。应用程序在连接数据源之前申请连接句柄。每个连接句柄与环境句柄有关,环境

6、句柄上可以有多个与其有关的连接句柄。(3)语句句柄:ODBC语句包括应用访问数据源的SQL语句和语句相关的管理信息,语句句柄标识每个语句管理信息的内存结构。ODBC将语句句柄定义为HSTMT类型的变量。应用程序在提交SQL请求之前也必须申请语句句柄。每个语句句柄与一个连接句柄有关,每个连接句柄上可以有多个与其有关的语句句柄。4、执行流程(1)分配环境句柄基于ODBC3.X版本的应用统一使用SQLAllocHandle来分配句柄。调用时设计不同的句柄类型就可以获得该类型的句柄。但在API内部实现上一般重新转换为执行SQLAllocEnv,SQLAllocConnect和SQLAllocStmt,

7、这样可以达到兼容和代码重用作用。SQLAllocEnv:用来分配环境句柄。例如:Dimrc As Integer ODBC函数的返回码Dim henv As Long ODBC环境句柄rc = SQLAllocEnv(henv) 获取ODBC环境句柄(2)分配连接句柄SQLAllocConnect:用来分配连接句柄。连接句柄提供对一些信息的访问,例如,在连接上的有效语句及标识符句柄,以及当前是否打开一些一个事务处理。调用SQLAllocConnect 函 数 获 取 连 接 句 柄。例如: Dim hdbcAs Long 连接句柄 rc = SQLAllocConnect(henv, hdbc

8、) 获取连接句柄(3)建立数据源使用已分配的连接句柄来建立应用程序和数据源/数据库系统的连接,进行句柄和数据源的绑定。绑定也由目标数据源的ODBC驱动程序完成。建立的连接方式有三种: SQLConnect、SQLDriverConnect 和SQLDriverConnectl SQLConnect:最简单的方式 例 如:DimDSN As String, UID As String, PWD As StringDSN = DataSourceName ODBC数据源名称UID = UserID 用户帐号PWD = Password 用户口令rc = SQLConnect(hdbc, DSN,

9、Len(DSN),UID,Len(UID), PWD, Len(PWD) 建立连接其中:hdbc,已经分配的连接句柄,DSN 、UID和PWD分别是数据源、用户名和用户密码。l SQLDriverConnect交互式连接的方法。应用程序根据驱动程序的规格说明为参数inconnectionstringl SQLDriverConnect:可以多次调用以创建到数据源的有效ODBC连接。(4)分配语句句柄用户对DBC数据源的存取操作,都是通过SQL语句实现的。在这个过程中,应用程序 将通过连接向ODBC数据库提交SQL语句,以完成用户请求的操作。即通过执行SQLAllocHandle或SQLAllo

10、cStmt来分配语句句柄。调用SQLAllocStmt 函数获取语句句柄。例如:Dimhstmt As Longrc= SQLAllocStmt(hdbc, hstmt)(5)执行SQL语句执行SQL语句。 执行SQL 语 句 的方法比较多, 最简单明了的方法是调用SQLAllocStmt函数,例如:DimSQLstmt As StringSQLstmt= SELECT * FROM authorsrc= SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt)如果SQL语句被顺利提交并正确执行,那么就会产生一个结果集。检索结果集的方法有很多,最简单最直接的方法是调

11、用SQLFetch 和SQLGetData 函 数。SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;SQLGetData函数的功能是提取结果集中当前记录的某个字段值。通常可以采用一个循环以提取结果集中所有记录的所有字段值,该循环重复执行SQLFetch和SQLGetData函数,直至SQLFetch函数返回SQL_NO_DATA_FOUND, 这表示已经到达结果集的末尾。DimColVal As String * 225ColVal= String(255, 0)DoUntil SQLFetch(hstmt) = SQL_NO_DATA_FOUNDrc =SQLGetData

12、(hstmt, i, SQL_C_CHAR, ColVal, Len(ColVal), SQL_NULL_DATA)Loop(6)结束应用程序在应用程序完成数据库操作, 退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的如下: 调用SQLFreeStmt 函数释放语句句柄及其相关的系统资源。例如:rc= SQLFreeStmt(hstmt, SQL_DROP)调用SQLDisconnect 函数关闭连接。 例 如:rc= SQLDisconnect(hdbc)调用SQLFreeConnect函数释放连接句柄及其相关的系统资源。例如

13、:rc= SQLFreeConnect(hdbc)调用SQLFreeEnv函数释放环境句柄及其相关的系统资源,停止ODBC 操作。 例如:rc= SQLFreeEnv(henv)(7)错 误 处 理所有DBCAPI函 数, 若在执行期间发生错误, 都将返回一个标准错误代码SQL_ERROR。一般来讲,在每次调用ODBC API 函 数 之 后, 都应该检查该函数返回值,确定该函数是否成功地执行,再决定是否继续后续过程。 而详细的错误信息,可以调用SQLError 函数获得。SQLError 函数将返回下列信息: 标准的ODBC错误状态码 ODBC 数据源提供的内部错误编码错误信息串以下是ODB

14、C的API( 加入模块文件module1.bas)Declare Function SQLAllocEnvLib odbc32.dll (phenv&) As IntegerDeclare Function SQLAllocConnect Lib odbc32.dll (ByVal henv&,phdbc&) As IntegerDeclare Function SQLAllocStmt Lib odbc32.dll (ByVal hdbc&,phstmt&) As IntegerDeclare Function SQLConnect Lib odbc32.dll (ByVal hdbc&,

15、ByValszDSN$, ByVal cbDSN%, ByVal szUID$, ByVal cbUID%,ByVal szAuthStr$, ByVal cbAuthStr%)As IntegerDeclare FunctionSQLColAttributesString Lib odbc32.dll AliasSQLColAttributes (ByVal hstmt&, ByVal icol%, ByValfDescType%,ByVal rgbDesc As String, ByVal cbDescMax%, pcbDesc%, pfDesc&) AsIntegerDeclare Fu

16、nction SQLDisconnectLib odbc32.dll (ByVal hdbc&) As Integer,eclare FunctionSQLExecDirect Lib odbc32.dll (ByVal hstmt&, ByVal szSqlStr$,ByVal cbSqlStr&) As IntegerDeclare Function SQLFetch Lib odbc32.dll (ByVal hstmt&) AsIntegerDeclare Function SQLFreeConnect Lib odbc32.dll (ByVal hdbc&) AsIntegerDec

17、lare Function SQLFreeEnv Lib odbc32.dll (ByVal henv&) AsIntegerDeclare Function SQLFreeStmt Lib odbc32.dll (ByVal hstmt&,ByVal fOption%) As IntegerDeclare Function SQLGetData Lib odbc32.dll (ByVal hstmt&, ByValicol%,ByVal fCType%, ByVal rgbValue As String, ByVal cbValueMax&,pcbValue&) As IntegerDecl

18、are Function SQLNumResultCols Libodbc32.dll (ByVal hstmt&, pccol%) As IntegerGlobal Const SQL_C_CHAR AsLong = 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 =

19、0二、ODBC环境配置1.打开ODBC数据源管理器面板。 在windows2000打开控制面板,再打开管理工具,你就能看到数据源(ODBC)这一项了,对windows9x来讲,则直接在控制面板中就可以看到。2.双击图标打开管理器,再选择 系统DSN ,我们的数据源是在这里添加的3.添加数据源。点击添加按钮,开始创建数据源,在接下来的对话框中选择数据源的驱动程序,三、简单应用实例 本实例将编制一个客户机端VB 应用程序, 通过Windows NT 局域网查询服务器端MS SQL Server 2000 样板数据库PUBS中的AUTHORS 数 据 表, 并在一个Grid 控件中显示查询结果。首先

20、,使用Windows 控制面板中的ODBC 驱动管理器新建一个ODBC数据源,定义数据源名称为ODBC_API_DEMO,定义登录数据库为PUBS, 其它 信息应根据用户的环境正确设置。 然后,启动VB,新建一个项目Project1,在 缺省窗体Form1 中加入一个Grid 控件Grid1、 两个CommandButton控件cmdQuery 和cmdClose, 在Project1 中 插 入一个模块Module1, 将前面列举API声明语句加入其中。 程序代码如下:Private Sub Form_Load()Dim rc As Integerrc = SQLAllocEnv(henv)

21、If rc 0Then MsgBox 无法初始化ODBC EndEnd Ifrc = SQLAllocConnect(henv,hdbc)If rc =0 Then MsgBox无法获得连接句柄 rc = SQLFreeEnv(henv) EndEnd IfDim DSN As String, UID AsString, PWD As StringDSN =ODBC_API_DEMOUID = guestPWD = rc = SQLConnect(hdbc, DSN, Len(DSN), UID, Len(UID), PWD,Len(UID)If rc = SQL_ERROR Then Msg

22、Box 无法建立与ODBC数据源的连接 EndEnd IfEnd SubPrivate Sub cmdQuery_Click() Dim hstmt AsLong Dim SQLstmt AsString Dim RSCols AsInteger, RSRows As Long Dim rc As Integer,i As Integer, j As Integer Dim ColVal AsString * 1024 Dim ColValLen AsLong, ColLabLen As Integer, larg As Long rc =SQLAllocStmt(hdbc, hstmt) I

23、f rcSQL_SUCCESS Then MsgBox 无法获得SQL语句句柄 Exit SubEnd If SQLstmt =SELECT * FROM authors rc =SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt) If rc SQL_SUCCESS Then MsgBoxSQL语句执行失败 Exit Sub End If rc =SQLNumResultCols(hstmt, RSCols) If RSCols 1 Then Grid1.Cols =RSCols Grid1.Rows =10 Grid1.Row = 0 Else Exit S

24、ub End IfFor i = 1 To RSCols rc =SQLColAttributesString(hstmt, i, SQL_COLUMN_LABEL, ColVal, 255, ColLabLen,larg)Grid1.Col = i 1Grid1.Text = Left(ColVal, ColLabLen)Next iDo Until SQLFetch(hstmt) =SQL_NO_DATA_FOUND ColVal = String$(1024, 0) If Grid1.Row + 1 = Grid1.Rows Then Grid1.Rows = Grid1.Rows +

25、1End IfGrid1.Row = Grid1.Row + 1For i = 1 To RSColsrc = SQLGetData(hstmt, i,SQL_C_CHAR,ColVal, Len(ColVal), ColValLen)Grid1.Col = i 1Grid1.Text = Left$(ColVal, ColValLen)Next iLooprc = SQLFreeStmt(hstmt, SQL_DROP)End SubPrivate Sub cmdClose_Click()Dim rc As IntegerIf hdbc 0 Thenrc = SQLDisconnect(hdbc)End Ifrc = SQLFreeConnect(hdbc)If henv 0 Thenrc = SQLFreeEnv(henv)End IfEndEnd Sub

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1