汇编教程:连接数据源

本教程中,我们将学习使用ODBC APIs的细节.

因为我们的程序并不与ODBC驱动程序直接通信,而是通过ODBC管理器来定义一系列APIs供你的程序调用以完成工作,所以我们需要包含odbc32.inc和odbc32.lib文件,当然还有windows.inc。

连接数据源需要以下几步:

分配一个环境句柄(environment handle). 在进行每个ODBC任务(session)时仅需这样做一次.一旦获得了句柄,我们就可修改环境属性来适合我们的需要。你可以把这想象为在DB工作中创建一个workspace.

确认将使用的ODBC的版本. 你可在ODBC 2.x版和3.x版间选择.他们在很多方面存在不同,因此本步骤是必须的以使得ODBC管理器它将用何种语法与用户程序通讯,及如何解释用户程序的命令.

分配一个连接句柄.这个步骤可看作创建一个空连接.我们还没有指定使用那一个驱动程序,连接那一个数据库.这些信息将在稍后来写入.

建立一个连接.可通过调用ODBC函数来建立连接.

当连接完成时,必须通过以下步骤来关闭和销毁它:

断开与数据源的连接.

释放连接句柄.

释放环境句柄 (如果不再需要在这个环境中作更多连接)

分配一个句柄

在ODBC 3.x版本以前,我们需要调用很多独立的函数来分配环境、连接和语句句柄(SQLAllocEnv, SQLAllocConnect, SQLAllocStmt).而在ODBC 3.x中, 这些函数被SQLAllocHandle所代替,语法如下:

SQLRETURN SQLAllocHandle( SQLSMALLINT HandleType,
SQLHANDLE InputHandle,
SQLHANDLE * OutputHandlePtr
);

看上去挺麻烦,简化一下看看:

SQLAllocHandle proto HandleType:DWORD, InputHandle:DWORD, OutputHandlePtr:DWORD

SQLRETURN 被定义为SQLSMALLINT类型.而 SQLSMALLINT被定义为短整型,例如一个字(16 bits). 所以该函数的返回值在ax中,而不是 eax. 这是很重要的.但是Win32下函数的参数是通过32位堆栈来传送的.即使这个参数只是一个字长(16位),它也应被扩展为32位.这就是为什么HandleType被说明为双字(dword)而不是字(word).看一下导入库 odbc32.lib,SQLAllocHandle的入口是_SQLAllocHandle@12. 就是说这个函数的参数的组合长度为12字节(3 dwords).然而,这不是说C函数的原型不对. SQLAllocHandle会只用HandleType的底位字并忽略高位字.因此C函数原型是功能上(functionally)正确而我们的汇编函数原型反映了实际.

结束了SQL类型的讨论,我们来看一看函数的参数和返回值。.

HandleType 是一个常数,定义了希望分配的句柄类型.可能值如下:

SQL_HANDLE_ENV 环境句柄(Environment handle)

SQL_HANDLE_DBC 连接句柄(Connection handle)

SQL_HANDLE_STMT 语句句柄(Statement handle)

SQL_HANDLE_DESC 描述符句柄(Descriptor handle)

描述符是一个数据集合描述了一个SQL语句的参数或一个结果集的列数, 视应用程序或驱动程序而定。

InputHandle 是指向父"文本"的句柄.就是说,如果你想分配一个连接句柄, 需要通过一个环境句柄因为连接将在那个环境的文本中建立.如果你想分配一个环境句柄,这个参数必须为SQL_HANDLE_NULL (注意SQL_HANDLE_NULL在windows.inc版本1.18及其以前版本中被不正确的定义为0L.你需要删除掉"L"否则程序不会被编译通过.这是我的错,因为我负责修订windows.inc中的 SQL/ODBC部分.) 因为环境没有父文本.对于语句和描述符句柄,我们需要将连接句柄作为这个参数。

OutputHandlePtr 如果调用成功,将指向一个双字,其中包含了被分配的句柄.

SQLAllocHandle 可能的返回值如下:

SQL_SUCCESS 函数成功完成.

SQL_SUCCESS_WITH_INFO 函数成功完成,但带回非致命错误或警告.

SQL_ERROR 函数调用失败.

SQL_INVALID_HANDLE 传送给函数的句柄非法.

无论函数的调用成功还是失败,我们都可通过调用SQLGetDiagRec或SQLGetDiagField函数来获得更多的信息.它们与Win32 API中的GetLastError很相似.

时间: 2024-08-22 14:13:00

汇编教程:连接数据源的相关文章

连接数据源

数据|数据源 连接数据源本教程中,我们将学习使用ODBC APIs的细节. 因为我们的程序并不与ODBC驱动程序直接通信,而是通过ODBC管理器来定义一系列APIs供你的程序调用以完成工作,所以我们需要包含odbc32.inc和odbc32.lib文件,当然还有windows.inc. 连接数据源需要以下几步:分配一个环境句柄(environment handle). 在进行每个ODBC任务(session)时仅需这样做一次.一旦获得了句柄,我们就可修改环境属性来适合我们的需要.你可以把这想象为

汇编教程:ODBC基础

这是使用 win32asm进行数据库编程系列的第一份教程.在如今的IT界,数据库编程变的越来越重要,所以我们不能再忽视它.但如今有很多种数据库在使用,如果我们为了实现win32下数据库汇编语言编程而学习各种数据库文件格式,所花时间大概称得上"永恒". 幸运的是,Microsoft的一项技术使得我们得以摆脱这个大麻烦.它被称为ODBC,是开放式数据库互连(Open Database Connectivity)的缩写,这是一族API,与Windows API相似.它主要与数据库打交道.就是

reporting service 无法连接数据源

问题描述 server已经连上了,可是无法连接数据源,刚上手,搞不清楚要怎么弄啊,求帮忙啊,这个URL也无法访问

wfs-ogr在连接数据源之后,执行ExcuteSQL()方法时,sql语句中含有中文的语法规范?

问题描述 ogr在连接数据源之后,执行ExcuteSQL()方法时,sql语句中含有中文的语法规范? 使用C#调用OGR类库 数据源:将shp文件使用geoserver发布成wfs服务,利用ogr提供的wfs驱动进行调用: 使用的方法:连接wfs服务之后,调用datasource类中的ExcuteSQL(string strsql)方法 问题:当执行的sql语句中含有中文时,则会报语法错误:eg:select * from ceshi where 编码='abc',有大神使用ogr调用wfs服务

《Tableau数据可视化实战》——第1章连接数据源

第1章连接数据源1.1 简介1.2 连接文本文件1.3 连接Excel文件1.4 连接Access数据库1.5 连接SQL Server数据库1.6 从剪贴板上粘贴1.7 连接其他数据库1.8 连接Windows Azure Marketplace1.9 理解维度和度量1.10 改变数据类型1.11 应用筛选器1.12 合并不同数据源 本章将重点介绍以下内容:连接文本文件连接Excel文件连接Access数据库连接SQL Server数据库从剪贴板上粘贴连接其他数据库连接Window Azure

tomcat连接数据源问题

数据|数据源|问题 折腾了几个小时.. 终于连通了,现在终结一下..我用的tomcat50.28.连接mysql数据库! 1,先在tomcat的admin下配置数据源! 2,在web.xml下加上<resource-ref>      <description>Northwind Connection</description>      <res-ref-name>jdbc/Northwind</res-ref-name>      <r

汇编教程:使用语句

继续我们的学习,在这一章,我们来看看如何通过ODBC来操作数据源. 在上一章,我们已学习了第一步,怎样连接一个数据源.一个连接定义了用户与数据源的数据通道.它是静态的.如果要想操作数据源,我们就必须使用语句(statement).可以认为语句就是发给数据源的命令.这个"命令"必须用SQL写成.通过使用语句,我们就可以修改数据源的结构.在其中执行查询.修改及删除数据. 准备及使用语句可分为以下几个步骤: 分配一个语句句柄(statement handle) 创建SQL语句 执行语句 销毁

was8集群连接数据源出错

问题描述 我在was8上搭建了集群WASCluster(节点1和节点2我都选择的是备机上的同一个节点oaapp02Node02),然后新建了数据源mis2datasource,再测试时出现了图2中的提示,请问大家这个该怎么解决啊? 解决方案 解决方案二:要么是你本身的数据源无法连接.具体还是要看你报的什么错(日志)

Access连接数据源(ODBC)配置(新手必知)_Access

今天要连接Access时发现win7 64位旗舰版控制面板中管理工具下的数据源(ODBC)配置竟然只有SQLServer的驱动,其他的都没有了,这可不好玩!上网百度了一番,有人也遇过这样的问题,我在此猜测只有64位win7有这问题,解决办法:运行C:/Windows/SysWOW64下odbcad32.exe就可以正常添加各种数据源的驱动程序了...虽不是什么高深问题,但在此记录一下,以防忘记!