﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Prayer-随笔分类-DB2CLI</title><link>http://www.cppblog.com/prayer/category/8520.html</link><description>在一般中寻求卓越</description><language>zh-cn</language><lastBuildDate>Thu, 21 Mar 2019 13:20:21 GMT</lastBuildDate><pubDate>Thu, 21 Mar 2019 13:20:21 GMT</pubDate><ttl>60</ttl><item><title>db2Load API - Load data into a table</title><link>http://www.cppblog.com/prayer/archive/2010/07/23/121108.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Fri, 23 Jul 2010 04:26:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2010/07/23/121108.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/121108.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2010/07/23/121108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/121108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/121108.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0008704.htm&nbsp; DB2 Version 9 for Linux, UNIX, and Windowsdb2Load API - Load data into a ta...&nbsp;&nbsp;<a href='http://www.cppblog.com/prayer/archive/2010/07/23/121108.html'>阅读全文</a><img src ="http://www.cppblog.com/prayer/aggbug/121108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2010-07-23 12:26 <a href="http://www.cppblog.com/prayer/archive/2010/07/23/121108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Precompiler refuse int type in EXEC SQL BEGIN DECLARE SECTION </title><link>http://www.cppblog.com/prayer/archive/2010/01/20/106093.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Wed, 20 Jan 2010 15:14:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2010/01/20/106093.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/106093.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2010/01/20/106093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/106093.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/106093.html</trackback:ping><description><![CDATA[<div id=KonaBody>
<div id=post_message_3698263>
<div style="MARGIN: 5px 20px 20px">
<div class=smallfont style="MARGIN-BOTTOM: 2px">Quote:</div>
<table cellSpacing=0 cellPadding=4 width="100%" border=0>
    <tbody>
        <tr>
            <td class=alt2 style="BORDER-RIGHT: 1px inset; BORDER-TOP: 1px inset; BORDER-LEFT: 1px inset; BORDER-BOTTOM: 1px inset">
            <div>Originally Posted by <strong>Dave Rush</strong> </div>
            <div style="FONT-STYLE: italic">I have a problem compiling my embedded sql: <br><br>db2 prep Dbprog.sqc bindfile gave me the following error. <br><br><strong>172 SQL0008N The token "int" found in a host variable<br>declaration is not valid.</strong><br><br>Is seems that the precompiler do not accept the int declarations, it accept only short or long. Is there a way to tell the precompiler to accept int variable like this <br><br>EXEC SQL BEGIN DECLARE SECTION;<br>int maj = 0;<br>int min = 0;<br>char pch = 0;<br>EXEC SQL END DECLARE SECTION;<br><br><br><br>Thanks</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
No, long and short only. I assume this is because "int" can be different things to different compilers, etc.</div>
</div>
<br>改成long确实就可以了。<br><!-- / message --><!-- sig -->
<img src ="http://www.cppblog.com/prayer/aggbug/106093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2010-01-20 23:14 <a href="http://www.cppblog.com/prayer/archive/2010/01/20/106093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游标中rollback引起游标关闭 </title><link>http://www.cppblog.com/prayer/archive/2009/12/16/103305.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Wed, 16 Dec 2009 02:47:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/12/16/103305.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/103305.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/12/16/103305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/103305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/103305.html</trackback:ping><description><![CDATA[无论是否使用with hold与否，rollback将释放session中的游标。commit只释放不带with hold的游标。 <br><br>保持游标打开的方法是在定义游标时加上with hold选项<br>但是，我declare 游标时使用了with hold选项--只对commit有效。<br><br>程序段：<br>declare test_cur cursor with hold for<br>&nbsp; &nbsp;&nbsp;&nbsp;select .... from A where ... order by ... with ur;<br><br>open test_cur;<br>while( 1 ){<br>&nbsp; &nbsp; fecth test_cur into ......;<br>&nbsp; &nbsp; 判断SQLCODE<br><br>&nbsp; &nbsp; begin_work();&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;/* 其实就是设置了一个标志 */<br>&nbsp; &nbsp; SQL 操作，修改其他表或者游标所在表的数据。<br>&nbsp; &nbsp;根据结果判断 commit or rollback。&nbsp; &nbsp; /* 此处如果rollback 游标被关闭 */<br>}<br><br>异常状态：<br>如果游标中进行了SQL操作，根据结果判断并rollback时，<br>下一次fetch时，会提示 501 没有打开游标。从而报错退出。<br><br><br><br><span class=bold>这种方案是否可行</span><br><br>
<div class=t_msgfont id=message5694669>游标改用普通游标。<br>游标取出当前记录后，fork子进程。<br>主进程只管从游标取数。<br>子进程进行事务、处理、判断、修改状态、提交等等。<br>主进程等子进程的结束信号，然后取下一条记录。<br>程序段：<br>declare test_cur cursor with hold for<br>&nbsp; &nbsp;&nbsp;&nbsp;select .... from A where ... order by ... with ur;<br><br>open test_cur;<br>while( 1 ){<br>&nbsp; &nbsp; fecth test_cur into ......;<br>&nbsp; &nbsp; 判断SQLCODE<br><br>&nbsp; &nbsp; pid = fork();<br><br>&nbsp; &nbsp; if( pid == 0 ) {&nbsp; &nbsp; /* 子进程干活 */<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;sqledtin( &amp;sqlca );<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;setsid();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;signal( SIGHUP, SIG_IGN );<br><br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;db_disconn( G_mdb_name );<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;begin_work();&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;/* 其实就是设置了一个标志 */<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;SQL 操作，修改其他表或者游标所在表的数据。<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;根据结果判断 commit or rollback。&nbsp; &nbsp; <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;db_disconn();<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;exit();<br>&nbsp; &nbsp; }<br><br>&nbsp; &nbsp; /* 主进程等待子进程结束 */<br>}<br>close test_cur;</div>
<br>
<div class=t_msgfont id=message5697362>如果是两个不同的事务的话，你用CLI来写比较方便</div>
<br>
<div class=t_msgfont id=message5719307>在cursor内部设立一个savepoint, rollback时用<br>rollback to savepoint a;</div>
<br>
<img src ="http://www.cppblog.com/prayer/aggbug/103305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-12-16 10:47 <a href="http://www.cppblog.com/prayer/archive/2009/12/16/103305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面了解ODBC技术</title><link>http://www.cppblog.com/prayer/archive/2009/09/17/96512.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 17 Sep 2009 04:14:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/09/17/96512.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/96512.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/09/17/96512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/96512.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/96512.html</trackback:ping><description><![CDATA[<p>目前，众多的厂商推出了行行色色的数据库系统，它们在性能、价格和应用范围上各有千秋。一个综合信息系统的各部门由于需求差异等原因，往往会存在多种数据库，它们之间的互连访问成为一个棘手的问题，特别是当用户需要从客户机端访问不同的服务器时。<br>微软提出的开放式数据库互连（Open-DataBase-Connectivity，即ODBC）成为目前一个强有力解决[本文由网站<a href="http://www.gwdq.com/">www.gwdq.com</a>公文大全<a href="http://www.gwdq.cn/">www.gwdq.cn</a>收集整理]方案，并逐步成为Windows和Macintosh平台上的标准接口，并推动了这方面的开放性和标准化。<br>一、ODBC的产生和发展<br>关系型数据库产生后很快就成为数据库系统的主流产品，由于每个DBMS厂商都有自己的一套标准，人们很早就产生了标准化的想法，于是产生了SQL，由于其语法规范逐渐为人所接受，成为RDBMS上的主导语言。最初，各数据库厂商为了解决[本文由网站<a href="http://www.gwdq.com/">www.gwdq.com</a>公文大全<a href="http://www.gwdq.cn/">www.gwdq.cn</a>收集整理]互连的问题，往往提供嵌入式SQL API，用户在客户机端要操作系统中的RDBMS时，往往要在程序中嵌入SQL语句进行预编译。由于不同厂商在数据格式、数据操作、具体实现甚至语法方面都具有不同程度的差异，所以彼此不能兼容。<br>长期以来，这种API的非规范情况令用户和RDBMS厂商都不能满意。在80年代后期，一些著名的厂商包括Oracle、Sybase、Lotus、Ingres、Informix、HP、DEC等结成了SQL Access Group（简称SAG），提出了SQL API的规范核心：调用级接口（Call Level Interface），简称CLI。<br>1991年11月，微软宣布了ODBC，次年推出可用版本。1992年2月，推出了ODBC SDK 2.0版。ODBC基于SAG的SQL CAE草案所规定的语法，共分为Core、Level 1、 Level 2三种定义，分别规范了22、16、13共51条命令，其中29条命令甚至超越了SAG CLI中原有的定义，功能强大而灵活。它还包括标准的错误代码集、标准的连接和登录DBMS方法、标准的数据类型表示等。<br>由于ODBC思想上的先进性，且没有同类的标准或产品与之竞争，它一枝独秀，推出后仅仅两三年就受到了众多厂家与用户的青睐，成为一种广为接受的标准。目前，已经有130多家独立厂商宣布了对ODBC的支持，常见的DBMS都提供了ODBC的驱动接口，这些厂商包括Oracle、Sybase、Informix、Ingres、IBM(DB/2)、DEC(RDB)、HP(ALLBASE/SQL)、Gupta、Borland(Paradox)等。目前，ODBC已经成为客户机/服务器系统中的一个重要支持技术。<br>二、ODBC的基本思想与特点<br>ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口，开发厂商根据ODBC的标准去实现底层的驱动程序，这个驱动对用户是透明的，并允许根据不同的DBMS采用不同的技术加以优化实现，这就利于不断吸收新的技术而趋完善。<br>这同时也就是数据库驱动的思想，它很类似于Windows中打印驱动的思想。在Windows中，用户安装不同的打印驱动程序，使用同样一条打印语句或操作，就可很容易地实现在不同打印机上打印输出，而不需要了解内部的具体原理。ODBC出现以后，用户安装不同的DBMS驱动就可用同样的SQL语句实现在不同DBMS上进行同样的操作，而且无需预编译。ODBC带来了数据库连接方式的变革，如图1所示。在传统方式中，开发人员要熟悉多个DBMS及其API，一旦DBMS端出现变动，则往往导致用户端系统重新编建或者源代码的修改，这给开发和维护工作带来了很大困难。在ODBC方式中，不管底层网络环境如何，也无论采用何种DBMS，用户在程序中都使用同一套标准代码，无需逐个了解各DBMS及其API的特点，源程序不因底层的变化而重新编建或修改，从而减轻了开发维护的工作量，缩短了开发周期。<br>@@12W03500.GIF;图1 数据库连接方式的转变@@<br>概括起来，ODBC具有以下灵活的特点：<br>1. 使用户程序有很高的互操作性，相同的目标代码适用于不同的DBMS；<br>2. 由于ODBC的开放性，它为程序集成提供了便利，为客户机/服务器结构提供了技术支持；<br>3. 由于应用与底层网络环境和DBMS分开，简化了开发维护上的困难。<br>三、ODBC的体系结构和实现<br>ODBC是依靠分层结构来实现的，如此可保证其标准性和开放性。图2所示为ODBC的体系结构，它共分为四层：应用程序、驱动程序管理器、驱动程序和数据源。微软公司对ODBC规程进行了规范，它为应用层的开发者和用户提供标准的函数、语法和错误代码等，微软还提供了驱动程序管理器，它在Windows中是一个动态链接库即ODBC.DLL。驱动程序层由微软、DBMS厂商或第三开发商提供，它必须符合ODBC的规程，对于Oracle，它是O<br>本文来自: 公文大全(<a href="http://www.gwdq.com/">www.gwdq.com</a>) 详细出处参考：<a href="http://www.gwdq.com/lwzx/jsj/jsjll/146960.html">http://www.gwdq.com/lwzx/jsj/jsjll/146960.html</a><br>RA6WIN.DLL，对于SQL Server，它是SQLSRVR.DLL。</p>
<p><br>@@12W03501.GIF;图2 ODBC体系结构@@<br>下面我们详细介绍各层的功能。<br>1. 应用程序层(Application)<br>使用ODBC接口的应用程序可执行以下任务：<br>①请求与数据源的连接和会话(SQLConnect)；<br>②向数据源发送SQL请求(SQLExecDirct或SQLExecute)；<br>③对SQL请求的结果定义存储区和数据格式；<br>④请求结果；<br>⑤处理错误；<br>⑥如果需要，把结果返回给用户；<br>⑦对事务进行控制，请求执行或回退操作(SQLTransact)；<br>⑧终止对数据源的连接(SQLDisconnect)。<br>2. 驱动程序管理器(Driver Manager)<br>由微软提供的驱动程序管理器是带有输入库的动态连接库ODBC.DLL，其主要目的是装入驱动程序，此外还执行以下工作:<br>①处理几个ODBC初始化调用；<br>②为每一个驱动程序提供ODBC函数入口点；<br>③为ODBC调用提供参数和次序验证。<br>3. 驱动程序(Driver)<br>驱动程序是实现ODBC函数和数据源交互的DLL，当应用程序调用SQL Connect或者SQLDriver Connect函数时，驱动程序管理器装入相应的驱动程序，它对来自应用程序的ODBC函数调用进行应答，按照其要求执行以下任务:<br>①建立与数据源的连接；<br>②向数据源提交请求；<br>③在应用程序需求时，转换数据格式；<br>④返回结果给应用程序；<br>⑤将运行错误格式化为标准代码返回；<br>⑥在需要时说明和处理光标。<br>以上这些功能都是对应用程序层功能的具体实现。驱动程序的配置方式可以划分为以下两种。<br>(1)单层次(single-tier) 这种方式下，驱动程序要处理ODBC调用SQL语句，并直接操纵数据库，因此具有数据存取功能。这种配置最常见的是同一台微机之上异种数据库通过ODBC存取，如在Powerbuilder中存取XBase、Excel、Paradox等数据文件,如图3所示。@@12W03502.GIF;图3 一层配置示意图@@<br>(2)多层次(multiple-tier) 这种配置中驱动程序仅仅处理ODBC调用，而将SQL语句交给服务器执行，然后返回结果。这种情况往往是应用程序、驱动程序管理器、驱动程序驻留在客户机端，而数据源和数据存取功能放在服务器端。譬如用Foxpro或Excel存取SQL Server或Oracle上的数据,如图4所示。<br>@@12W03503.GIF;图4 二层配置示意图@@<br>有时在以上两者之间加上网关以解决[本文由网站<a href="http://www.gwdq.com/">www.gwdq.com</a>公文大全<a href="http://www.gwdq.cn/">www.gwdq.cn</a>收集整理]通信协议的转换等问题，这时驱动程序要将请求先传送给网关，如访问DEC RDB和IBM AS/400时的配置,如图5所示。<br>@@12W03504.GIF;图5 三层配置示意图@@<br>4. 数据源<br>数据源由用户想要存取的数据和它相关的操作系统、DBMS及网络环境组成。<br>四、一致性级别<br>从应用程序观点来看，最理想的情况是每个数据源和驱动程序都支持同一套ODBC函数调用和SQL语句。但是由于形形色色的DBMS在实现上有很大的差异，它们所依赖的系统和环境也各不相同，在对ODBC支持的程度上就不一致。一致性级别(Conformance Levels)建立了对众多功能的标准划分，为应用程序和驱动程序提供帮助和选择的依据。它划定了驱动程序所支持的ODBC函数和SQL语句的范围，我们可以用SQLGetInfo、SQLGetFunctions、SQLTypeInfo三个函数获知驱动程序所支持的功能集。ODBC从API和SQL语法两方面划分级别。<br>1. API的一致性<br>ODBC将函数调用划分为三级。<br>(1)核心API 它包括了与SAG的CLI相匹配的基本功能，包括：分配与释放环境、连接及语句句柄；连接到数据源；准备并执行SQL语句或立即执行SQL语句；为SQL语句和结果列中的参数分配存储器；从结果中检索数据，检索结果的信息；提交和撤消事务处理；检索错误信息。<br>(2)一级API 它包括了核心API的全部功能，比如用特定驱动程序的对话框连接到数据源；设置和查询语句值和连接选项；送部分或全部参数值；检索部分和全部结果；检索目录信息；检索关于驱动程序和数据源的信息。<br>(3)二级API 其功能包括核心和一级API的全部功能；浏览可获得的连接和可获得的数据源列表；发送参数值数组，检索结果数组；检索参数个数及参数描述；应用可卷动的光标；检索SQL语句和本机表格；检索各种目录信息；调用转换DLL。<br>2. SQL语法的一致性级别<br>从SQL方面可划分为最小的SQL语法、核心SQL语法和扩展SQL语法三个等级。<br>五、ODBC的应用与前景<br>ODBC的出现给用户描绘了一个诱人的前景，即网络中的Windows用户可以方便地访问各种数据库。现在，在微软推出的许多产品中都提供了ODBC支持，如Visal Basic 3.0、Visal C1.5、Excel 5.0、Word 6.0、FoxPro、Access等。同时其他一些应用软件和开发工具也提供了对ODBC的支持。因此用户只要安装不同的ODBC驱动程序，就可存取相应的数据库产品，而不管用户使用何种前台应用软件，也不管后台是何种数据库，这个存取的<br>本文来自: 公文大全(<a href="http://www.gwdq.com/">www.gwdq.com</a>) 详细出处参考：<a href="http://www.gwdq.com/lwzx/jsj/jsjll/146960_2.html">http://www.gwdq.com/lwzx/jsj/jsjll/146960_2.html</a><br>过程是一致的。<br>但是由于ODBC产生的时间还不长，其应用也同时存在着一些问题。首先，它的层次比较多，表现在性能上比专有的API要慢，这是其标准化和开发性所带来的必要的代价；其次，由于ODBC规定了三个层次的一致性级别，应用程序与驱动程序之间的匹配就会出现一些问题和矛盾，比如某些驱动程序支持的级别比较低，而应用程序要求的比较高；再者，由于不同的驱动程序为不同的开发商所开发，测试工作不能统一，而现有的开发和测试工具并不很完善；同时，在非SQL的数据库系统上的应用也存在一些问题。<br>微软公司将ODBC作为一项很重要的技术，它已承诺进一步改进ODBC技术，为驱动程序开发者提供更先进的开发和测试工具，还将交付系统管理和监控工具，它还将与DBMS厂商和第三方厂商建立更密切的合作，以期使驱动程序支持更高级别的一致性，并在规范化方面有所完善。目前，ODBC已为数据库供应商组织内部所认可，同时为众多应用软件厂商和第三方开发商所使用，相信随着SQL的推广和规范，用户和开发商会更加依赖于这一技术<br>本文来自: 公文大全(<a href="http://www.gwdq.com/">www.gwdq.com</a>) 详细出处参考：<a href="http://www.gwdq.com/lwzx/jsj/jsjll/146960_3.html">http://www.gwdq.com/lwzx/jsj/jsjll/146960_3.html</a><br></p>
<img src ="http://www.cppblog.com/prayer/aggbug/96512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-09-17 12:14 <a href="http://www.cppblog.com/prayer/archive/2009/09/17/96512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编译db2程序</title><link>http://www.cppblog.com/prayer/archive/2009/08/11/92914.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Tue, 11 Aug 2009 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/08/11/92914.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/92914.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/08/11/92914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/92914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/92914.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>len:len.o</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cc -o&nbsp;len len.o <strong>-q64</strong> -L/home/sqllib/lib64 -ldb2</span></p>
<p>&nbsp;</p>
<p><span>len.o:len.c</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cc -c -g <strong>-q64</strong> -I/home/sqllib/include/ len.c</span></p>
<p>&nbsp;</p>
<p><span>clean:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rm -f *.o</span></p><img src ="http://www.cppblog.com/prayer/aggbug/92914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-08-11 16:43 <a href="http://www.cppblog.com/prayer/archive/2009/08/11/92914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLAllocStmt — 分配语句句柄</title><link>http://www.cppblog.com/prayer/archive/2009/06/22/88289.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Mon, 22 Jun 2009 07:19:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/06/22/88289.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/88289.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/06/22/88289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/88289.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/88289.html</trackback:ping><description><![CDATA[<p><strong>用途</strong> <a name=IDX855></a><a name=IDX856></a><a name=IDX857></a>
<p><tt>SQLAllocStmt()</tt> 分配新的语句句柄并将其与连接句柄指定的连接相关联。对于在任何一个时候可以分配的语句句柄数目没有已定义的限制。
<p>在调用此函数之前，必须调用 <tt>SQLConnect()</tt>。
<p>必须在 <tt>SQLBindParam()</tt>、<tt>SQLPrepare()、SQLExecute()、SQLExecDirect()</tt> 或任何其它将语句句柄作为其中一个输入自变量的函数之前调用此函数。
<p><strong>语法</strong>
<pre><span style="FONT-SIZE: 90%">SQLRETURN SQLAllocStmt (SQLHDBC    hdbc,
SQLHSTMT   *phstmt);
</span></pre>
<p><strong>函数自变量</strong> <br>
<p><strong><a name=Table_12>表 12. SQLAllocStmt 自变量</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">数据类型 </span></th>
            <th id=COL2 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">自变量 </span></th>
            <th id=COL3 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">使用 </span></th>
            <th id=COL4 vAlign=bottom align=left width="40%"><span style="FONT-SIZE: 90%">描述 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLHDBC </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>hdbc</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">连接句柄 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLHSTMT * </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>phstmt</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输出 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">指向语句句柄的指针 </span></td>
        </tr>
    </tbody>
</table>
<p><strong>用法</strong>
<p>DB2 UDB CLI 使用每个语句句柄来使所有描述符、结果值、游标信息和状态信息与已处理的 SQL 语句相关联。虽然每个 SQL 语句都必须要有语句句柄，但可以将句柄重新用于不同的语句。
<p>对此函数的调用要求 <em>hdbc</em> 引用活动的数据库连接。
<p>要执行定位型更新或删除，应用程序必须将不同的语句句柄用于 SELECT 语句和 UPDATE 或 DELETE 语句。
<p>如果指向语句句柄的输入指针（<em>phstmt</em>）指向由先前的 <tt>SQLAllocStmt()</tt> 调用分配的有效语句句柄，则此调用的结果是覆盖原始值。这是应用程序编程错误，DB2 UDB CLI 不检测此错误。
<p><strong>返回码</strong>
<ul>
    <li>SQL_SUCCESS
    <li>SQL_ERROR
    <li>SQL_INVALID_HANDLE </li>
</ul>
<p>如果返回 SQL_ERROR，则 <em>phstmt</em> 自变量设置为 SQL_NULL_HSTMT。应用程序应使用同一个 <em>hdbc</em> 来调用 <tt>SQLError()</tt> 并将 <em>hstmt</em> 自变量设置为 SQL_NULL_HSTMT。
<p><strong>诊断</strong> <br>
<p><strong><a name=Table_13>表 13. SQLAllocStmt SQLSTATE</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=bottom align=left width="25%"><span style="FONT-SIZE: 90%">SQLSTATE </span></th>
            <th id=COL2 vAlign=bottom align=left width="25%"><span style="FONT-SIZE: 90%">描述 </span></th>
            <th id=COL3 vAlign=bottom align=left width="50%"><span style="FONT-SIZE: 90%">说明 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>08</strong>003 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">连接未打开 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%"><em>hdbc</em> 自变量指定的连接尚未打开。必须成功地为驱动程序建立连接（并且该连接必须已打开）才能分配 <em>hstmt</em>。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>40</strong>003 <strong>*</strong> </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">未知语句是否完成 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">在函数完成处理之前，CLI 与数据源之间的通信链路发生故障。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>58</strong>004 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">系统错误 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">不可恢复的系统错误。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>HY</strong>001 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">内存分配失败 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">驱动程序无法分配支持此函数的执行或完成所必需的内存。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>HY</strong>009 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">自变量值无效 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%"><em>phstmt</em> 是空指针 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>HY</strong>013 <strong>*</strong> </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">内存管理问题 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">驱动程序无法访问支持此函数的执行或完成所必需的内存。 </span></td>
        </tr>
    </tbody>
</table>
<p><a name=HDRXMASTMT><strong>示例</strong></a>
<p>请参考 <tt>SQLFetch()</tt>（<a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst59.htm#HDRXMFETCH">示例</a>）。 </p>
<img src ="http://www.cppblog.com/prayer/aggbug/88289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-06-22 15:19 <a href="http://www.cppblog.com/prayer/archive/2009/06/22/88289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLAllocEnv — 分配环境句柄</title><link>http://www.cppblog.com/prayer/archive/2009/06/22/88288.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Mon, 22 Jun 2009 07:16:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/06/22/88288.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/88288.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/06/22/88288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/88288.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/88288.html</trackback:ping><description><![CDATA[<h2><a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst02.htm#ToC_39" name=HDRFNAENV><u><font color=#0000ff>SQLAllocEnv — 分配环境句柄</font></u></a></h2>
<p><u><font color=#0000ff></font></u>
<p><strong>用途</strong> <a name=IDX843></a><a name=IDX844></a><a name=IDX845></a>
<p><tt>SQLAllocEnv()</tt> 分配环境句柄和相关联的资源。
<p>应用程序必须在 <tt>SQLAllocConnect()</tt> 或任何其它 DB2 UDB CLI 函数之前调用此函数。在以后所有需要环境句柄作为输入的函数调用中，都传送 <em>henv</em> 值。
<p><strong>语法</strong>
<pre><span style="FONT-SIZE: 90%">SQLRETURN SQLAllocEnv (SQLHENV    *phenv);
</span></pre>
<p><strong>函数自变量</strong> <br>
<p><strong><a name=Table_8>表 8. SQLAllocEnv 自变量</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">数据类型 </span></th>
            <th id=COL2 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">自变量 </span></th>
            <th id=COL3 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">使用 </span></th>
            <th id=COL4 vAlign=bottom align=left width="40%"><span style="FONT-SIZE: 90%">描述 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLHENV * </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>phenv</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输出 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">指向环境句柄的指针 </span></td>
        </tr>
    </tbody>
</table>
<p><strong>用法</strong>
<p>对于每个应用程序，在任何一个时候都只能有一个活动环境。以后任何对 <tt>SQLAllocEnv()</tt> 的调用将返回现有的环境句柄。
<p>缺省情况下，对 <tt>SQLFreeEnv()</tt> 所作的第一个成功调用将释放与该句柄相关联的资源。无论成功地调用了多少次 <tt>SQLAllocEnv()</tt>，都会发生这种情况。如果环境属性 SQL_ATTR_ENVHNDL_COUNTER 设置为 SQL_TRUE，则在释放与句柄相关联的资源之前，必须为每次成功的 SQLAllocEnv() 调用来调用 SQLFreeEnv()。
<p>要确保所有的 DB2 UDB CLI 资源都保持活动状态，调用 <tt>SQLAllocEnv()</tt> 的程序不应终止或离开堆栈。否则，应用程序将丢失打开的游标、语句句柄和其它已分配的资源。
<p><strong>返回码</strong>
<ul>
    <li>SQL_SUCCESS
    <li>SQL_ERROR </li>
</ul>
<p>如果返回 SQL_ERROR，并且 <em>phenv</em> 等于 SQL_NULL_HENV，则由于没有句柄可以与附加的诊断信息相关联，所以不能调用 <tt>SQLError()</tt>。
<p>如果返回码是 SQL_ERROR，并且指向环境句柄的指针不等于 SQL_NULL_HENV，则该句柄是<strong>受限句柄</strong>。这表示该句柄只能在 <tt>SQLError()</tt> 的调用中使用以获取更多的错误信息，或者用于 <tt>SQLFreeEnv()</tt> 的调用。 <a name=IDX846></a><a name=IDX847></a>
<p><strong>诊断</strong> <br>
<p><strong><a name=Table_9>表 9. SQLAllocEnv SQLSTATE</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=bottom align=left width="25%"><span style="FONT-SIZE: 90%">SQLSTATE </span></th>
            <th id=COL2 vAlign=bottom align=left width="25%"><span style="FONT-SIZE: 90%">描述 </span></th>
            <th id=COL3 vAlign=bottom align=left width="50%"><span style="FONT-SIZE: 90%">说明 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>58</strong>004 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">系统错误 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">不可恢复的系统错误。 </span></td>
        </tr>
    </tbody>
</table>
<p><a name=HDRXMAENV><strong>示例</strong></a>
<p>
<p>有关代码示例的信息，参见<a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst06.htm#HDRCODEDISCLAIMER"><u><font color=#0000ff>代码不保证声明信息</font></u></a>。
<pre><span style="FONT-SIZE: 90%">/*******************************************************
** file = basiccon.c
**    - demonstrate basic connection to two datasources.
**    - error handling  ignored for simplicity
**
**  Functions used:
**
**    SQLAllocConnect  SQLDisconnect
**    SQLAllocEnv      SQLFreeConnect
**    SQLConnect       SQLFreeEnv
**
**
********************************************************/
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include "sqlcli.h"
int
connect(SQLHENV henv,
SQLHDBC * hdbc);
#define MAX_DSN_LENGTH    18
#define MAX_UID_LENGTH    10
#define MAX_PWD_LENGTH    10
#define MAX_CONNECTIONS   5
int
main()
{
SQLHENV         henv;
SQLHDBC         hdbc[MAX_CONNECTIONS];
/* allocate an environment handle   */
SQLAllocEnv(&amp;henv);
/* Connect to first data source */
connect(henv, &amp;hdbc[0];);
/* Connect to second data source */
connect(henv, &amp;hdbc[1];);
/*********   Start Processing Step  *************************/
/* allocate statement handle, execute statement, etc.       */
/*********   End Processing Step  ***************************/
printf("\nDisconnecting .....\n");
SQLFreeConnect(hdbc[0]);    /* free first connection handle  */
SQLFreeConnect(hdbc[1]);    /* free second connection handle */
SQLFreeEnv(henv);           /* free environment handle       */
return (SQL_SUCCESS);
}
/********************************************************************
**   connect - Prompt for connect options and connect              **
********************************************************************/
int
connect(SQLHENV henv,
SQLHDBC * hdbc)
{
SQLRETURN       rc;
SQLCHAR         server[MAX_DSN_LENGTH + 1], uid[MAX_UID_LENGTH + 1],
pwd[MAX_PWD_LENGTH
+ 1];
SQLCHAR         buffer[255];
SQLSMALLINT     outlen;
printf("Enter Server Name:\n");
gets((char *) server);
printf("Enter User Name:\n");
gets((char *) uid);
printf("Enter Password Name:\n");
gets((char *) pwd);
SQLAllocConnect(henv, hdbc);/* allocate a connection handle     */
rc = SQLConnect(*hdbc, server, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS);
if (rc != SQL_SUCCESS) {
printf("Error while connecting to database\n");
return (SQL_ERROR);
} else {
printf("Successful Connect\n");
return (SQL_SUCCESS);
}
}
</span></pre>
<p><strong>参考</strong>
<ul>
    <li><a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst33.htm#HDRFNACON"><u><font color=#0000ff>SQLAllocConnect — 分配连接句柄</font></u></a>
    <li><a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst63.htm#HDRFNFENV"><u><font color=#0000ff>SQLFreeEnv — 释放环境句柄</font></u></a>
    <li><a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst36.htm#HDRFNASTMT"><u><font color=#0000ff>SQLAllocStmt — 分配语句句柄</font></u></a> </li>
</ul>
<img src ="http://www.cppblog.com/prayer/aggbug/88288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-06-22 15:16 <a href="http://www.cppblog.com/prayer/archive/2009/06/22/88288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLAllocHandle — 分配句柄</title><link>http://www.cppblog.com/prayer/archive/2009/06/22/88286.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Mon, 22 Jun 2009 07:12:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/06/22/88286.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/88286.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/06/22/88286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/88286.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/88286.html</trackback:ping><description><![CDATA[<p><strong>用途</strong> <a name=IDX850></a><a name=IDX851></a><a name=IDX852></a>
<p><tt>SQLAllocHandle()</tt> 分配任何类型的句柄。
<p><strong>语法</strong>
<pre><span style="FONT-SIZE: 90%">SQLRETURN SQLAllocHandle (SQLSMALLINT htype,
SQLINTEGER ihandle,
SQLINTEGER *handle);
</span></pre>
<p><strong>函数自变量</strong> <br>
<p><strong><a name=Table_10>表 10. SQLAllocHandle 自变量</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">数据类型 </span></th>
            <th id=COL2 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">自变量 </span></th>
            <th id=COL3 vAlign=bottom align=left width="20%"><span style="FONT-SIZE: 90%">使用 </span></th>
            <th id=COL4 vAlign=bottom align=left width="40%"><span style="FONT-SIZE: 90%">描述 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLSMALLINT </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>htype</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">要分配的句柄的类型。必须是 SQL_HANDLE_ENV、SQL_HANDLE_DBC、SQL_HANDLE_DESC 或 SQL_HANDLE_STMT。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLINTEGER </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>ihandle</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">描述在其中分配新句柄的上下文的句柄；然而，如果 <em>htype</em> 是 SQL_HANDLE_ENV，则这是 SQL_NULL_HANDLE。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLINTEGER * </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>handle</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输出 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">指向句柄的指针 </span></td>
        </tr>
    </tbody>
</table>
<p><strong>用法</strong>
<p>此函数组合了函数 <tt>SQLAllocEnv()、SQLAllocConnect()</tt> 和 <tt>SQLAllocStmt()</tt>。
<p>如果 <em>htype</em> 是 SQL_HANDLE_ENV，则 <em>ihandle</em> 必须是 SQL_NULL_HANDLE。如果 <em>htype</em> 是 SQL_HANDLE_DBC，则 <em>ihandle</em> 必须是有效的环境句柄。如果 <em>htype</em> 是 SQL_HANDLE_DESC 或 SQL_HANDLE_STMT，则 <em>ihandle</em> 必须是有效的连接句柄。
<p><strong>返回码</strong>
<ul>
    <li>SQL_SUCCESS
    <li>SQL_ERROR
    <li>SQL_INVALID_HANDLE </li>
</ul>
<img src ="http://www.cppblog.com/prayer/aggbug/88286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-06-22 15:12 <a href="http://www.cppblog.com/prayer/archive/2009/06/22/88286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLSetConnectAttr — 设置连接属性</title><link>http://www.cppblog.com/prayer/archive/2009/06/22/88284.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Mon, 22 Jun 2009 07:06:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2009/06/22/88284.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/88284.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2009/06/22/88284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/88284.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/88284.html</trackback:ping><description><![CDATA[<p><a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/index.htm?info/cli/rzadpmst99.htm">http://publib.boulder.ibm.com/iseries/v5r2/ic2989/index.htm?info/cli/rzadpmst99.htm</a><strong><br><br>用途</strong> <a name=IDX1101></a><a name=IDX1102></a>
<p><tt>SQLSetConnectAttr()</tt> 设置特定连接的连接属性。
<p><strong>语法</strong>
<pre><span style="FONT-SIZE: 90%">SQLRETURN SQLSetConnectAttr  (SQLHDBC     hdbc,
SQLINTEGER  fAttr,
SQLPOINTER  vParam,
SQLINTEGER  sLen);
</span></pre>
<p><strong>函数自变量</strong> <br>
<p><strong><a name=Table_146>表 146. SQLSetConnectAttr 自变量</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=top align=left width="20%"><span style="FONT-SIZE: 90%">数据类型 </span></th>
            <th id=COL2 vAlign=top align=left width="20%"><span style="FONT-SIZE: 90%">自变量 </span></th>
            <th id=COL3 vAlign=top align=left width="20%"><span style="FONT-SIZE: 90%">使用 </span></th>
            <th id=COL4 vAlign=top align=left width="40%"><span style="FONT-SIZE: 90%">描述 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLHDBC </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>hdbc</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">连接句柄 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLINTEGER </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>fAttr</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">要设置的连接属性，有关更多信息，请参考<a href="http://publib.boulder.ibm.com/iseries/v5r2/ic2989/info/cli/rzadpmst99.htm#TBLTBCONO">表 147</a>。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLPOINTER </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>vParam</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">与 <em>fAttr</em> 相关联的值。根据选项的不同，这可以是指向 32 位整数值的指针，也可以是字符串。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="20%"><span style="FONT-SIZE: 90%">SQLINTEGER </span></td>
            <td vAlign=top align=left headers=COL2 width="20%"><span style="FONT-SIZE: 90%"><em>sLen</em> </span></td>
            <td vAlign=top align=left headers=COL3 width="20%"><span style="FONT-SIZE: 90%">输入 </span></td>
            <td vAlign=top align=left headers=COL4 width="40%"><span style="FONT-SIZE: 90%">如果输入值是字符串的话，此自变量就是它的长度；否则不使用此自变量。 </span></td>
        </tr>
    </tbody>
</table>
<p><strong>用法</strong>
<p>通过 <tt>SQLSetConnectAttr()</tt> 设置的所有连接和语句选项都将持续到调用 <tt>SQLFreeConnect()</tt> 或下次调用 <tt>SQLSetConnectAttr()</tt> 时为止。
<p>通过 <em>vParam</em> 设置的信息的格式取决于所指定的 <em>fAttr</em>。选项信息可以是 32 位整数，也可以是指向以空终止的字符串的指针。 <br>
<p><strong><a name=TBLTBCONO>表 147. 连接选项</a></strong><br>
<table width="100%" border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=top align=left width="50%"><span style="FONT-SIZE: 90%"><em>fAttr</em> </span></th>
            <th id=COL2 vAlign=top align=left width="50%"><span style="FONT-SIZE: 90%">内容 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_AUTOCOMMIT </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的值，它设置连接的落实行为。可能的值列示如下：
            <ul>
                <li>SQL_TRUE — 在执行 SQL 语句时自动落实每个 SQL 语句。
                <li>SQL_FALSE — 不自动落实 SQL 语句。如果在具有落实控制的环境下运行，则必须使用 <tt>SQLEndTran()</tt> 或 <tt>SQLTransact()</tt> 来显式地落实或回滚更改。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_COMMIT<br>或<br>SQL_TXN_ISOLATION<br></span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的值，它设置 <em>hdbc</em> 所引用的当前连接的事务隔离级别。DB2 UDB CLI 接受下列值，但每个服务器都可能只支持这些隔离级别的其中某一些：
            <ul>
                <li>SQL_TXN_NO_COMMIT — 未使用落实控制。
                <li>SQL_TXN_READ_UNCOMMITTED — 脏读取、不可重复读取和幻象读取是有可能的。
                <li>SQL_TXN_READ_COMMITTED — 脏读取是不可能的。不可重复读取和幻象读取是有可能的。
                <li>SQL_TXN_REPEATABLE_READ — 脏读取和不可重复读取是不可能的。幻象读取是有可能的。
                <li>SQL_TXN_SERIALIZABLE — 事务是可序列化的。脏读取、不可重复读取和幻象都是不可能的。 </li>
            </ul>
            <p>在 IBM 术语中：
            <ul>
                <li>SQL_TXN_READ_UNCOMMITTED 是指&#8220;未落实的读取&#8221;；
                <li>SQL_TXN_READ_COMMITTED 是指&#8220;游标稳定性&#8221;；
                <li>SQL_TXN_REPEATABLE_READ 是指&#8220;读取稳定性&#8221;；
                <li>SQL_TXN_SERIALIZABLE 是指&#8220;可重复读取&#8221;。 </li>
            </ul>
            <p>有关&#8220;隔离级别&#8221;的详细说明，请参考 IBM SQL Reference。
            <p>应该在调用 <tt>SQLConnect()</tt> 之前设置 SQL_ATTR_COMMIT 属性。如果在建立连接之后更改了值，并且该连接是与远程数据源的连接，则在下一次对连接句柄成功调用 <tt>SQLConnect()</tt> 之前，此更改不会生效。 </span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_DATE_FMT </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_FMT_ISO — 使用&#8220;国际标准化组织&#8221;（ISO）日期格式 yyyy-mm-dd。这是缺省值。
                <li>SQL_FMT_USA — 使用美国日期格式 mm/dd/yyyy。
                <li>SQL_FMT_EUR — 使用欧洲日期格式 dd.mm.yyyy。
                <li>SQL_FMT_JIS — 使用&#8220;日本工业标准&#8221;日期格式 yyyy-mm-dd。
                <li>SQL_FMT_MDY — 使用日期格式 mm/dd/yyyy。
                <li>SQL_FMT_DMY — 使用日期格式 dd/mm/yyyy。
                <li>SQL_FMT_YMD — 使用日期格式 yy/mm/dd。
                <li>SQL_FMT_JUL — 使用儒略日期格式 yy/ddd。
                <li>SQL_FMT_JOB — 使用作业缺省值。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_DATE_SEP </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_SEP_SLASH — 使用斜杠（/）作为日期分隔符。这是缺省值。
                <li>SQL_SEP_DASH — 使用破折号（-）作为日期分隔符。
                <li>SQL_SEP_PERIOD — 使用句点（.）作为日期分隔符。
                <li>SQL_SEP_COMMA — 使用逗号（,）作为日期分隔符。
                <li>SQL_SEP_BLANK — 使用空格作为日期分隔符。
                <li>SQL_SEP_JOB — 使用作业缺省值。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_DBC_DEFAULT_LIB </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">一个字符值，这个值指示将用于解析未限定文件引用的缺省库。如果连接正在使用系统命名方式，则此项无效。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_DBC_SYS_NAMING </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_TRUE — DB2 UDB CLI 使用 iSeries 系统命名方式。使用斜杠（/）定界符来限定文件。使用作业的库列表来解析未限定的文件。
                <li>SQL_FALSE — DB2 UDB CLI 使用缺省命名方式，即 SQL 命名。使用句点（.）定界符来限定文件。使用缺省库或当前用户标识来解析未限定的文件。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_DECIMAL_SEP </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_SEP_PERIOD — 使用句点（.）作为小数分隔符。这是缺省值。
                <li>SQL_SEP_COMMA — 使用逗号（,）作为日期分隔符。
                <li>SQL_SEP_JOB — 使用作业缺省值。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_EXTENDED_COL_INFO </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_TRUE — 可以在 <tt>SQLColAttributes()</tt> 上使用对此连接句柄分配的语句句柄来检索扩展的列信息，如&#8220;基本表&#8221;、&#8220;基本模式&#8221;、&#8220;基本列&#8221;和&#8220;标号&#8221;。
                <li>SQL_FALSE — 不能在 <tt>SQLColAttributes()</tt> 函数上使用对此连接句柄分配的语句句柄来检索扩展的列信息。这是缺省值。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_TIME_FMT </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_FMT_ISO — 使用&#8220;国际标准化组织&#8221;（ISO）时间格式 hh.mm.ss。这是缺省值。
                <li>SQL_FMT_USA — 使用美国时间格式 hh:mmxx，其中 xx 是 AM 或 PM。
                <li>SQL_FMT_EUR — 使用欧洲时间格式 hh.mm.ss。
                <li>SQL_FMT_JIS — 使用&#8220;日本工业标准&#8221;时间格式 hh:mm:ss。
                <li>SQL_FMT_HMS — 使用 hh:mm:ss 格式。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_ATTR_TIME_SEP </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_SEP_COLON — 使用冒号（:）作为时间分隔符。这是缺省值。
                <li>SQL_SEP_PERIOD — 使用句点（.）作为时间分隔符。
                <li>SQL_SEP_COMMA — 使用逗号（,）作为时间分隔符。
                <li>SQL_SEP_BLANK — 使用空格作为时间分隔符。
                <li>SQL_SEP_JOB — 使用作业缺省值。 </li>
            </ul>
            </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_SAVEPOINT_NAME </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">一个字符值，它指示 <tt>SQLEndTran()</tt> 要对函数 SQL_SAVEPOINT_NAME_ROLLBACK 或 SQL_SAVEPOINT_NAME_RELEASE 使用的保存点名称。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="50%"><span style="FONT-SIZE: 90%">SQL_2ND_LEVEL_TEXT </span></td>
            <td vAlign=top align=left headers=COL2 width="50%"><span style="FONT-SIZE: 90%">32 位的整数值，这个值可以是：
            <ul>
                <li>SQL_TRUE — 通过调用 <tt>SQLError()</tt> 获取的错误文本将包含关于错误的完整文本描述。
                <li>SQL_FALSE — 通过调用 <tt>SQLError()</tt> 获取的错误文本将只包含关于错误的第一个级别的描述。这是缺省值。 </li>
            </ul>
            </span></td>
        </tr>
    </tbody>
</table>
<p><strong>返回码</strong>
<ul>
    <li>SQL_SUCCESS
    <li>SQL_SUCCESS_WITH_INFO
    <li>SQL_ERROR
    <li>SQL_INVALID_HANDLE </li>
</ul>
<p><strong>诊断</strong> <br>
<p><strong><a name=Table_148>表 148. SQLSetConnectAttr SQLSTATE</a></strong><br>
<table border=1>
    <tbody>
        <tr>
            <th id=COL1 vAlign=top align=left width="25%"><span style="FONT-SIZE: 90%">SQLSTATE </span></th>
            <th id=COL2 vAlign=top align=left width="25%"><span style="FONT-SIZE: 90%">描述 </span></th>
            <th id=COL3 vAlign=top align=left width="50%"><span style="FONT-SIZE: 90%">说明 </span></th>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>HY</strong>001 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">内存分配失败 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">驱动程序无法分配支持此函数的执行或完成所必需的内存。 </span></td>
        </tr>
        <tr>
            <td vAlign=top align=left headers=COL1 width="25%"><span style="FONT-SIZE: 90%"><strong>HY</strong>009 </span></td>
            <td vAlign=top align=left headers=COL2 width="25%"><span style="FONT-SIZE: 90%">自变量值无效 </span></td>
            <td vAlign=top align=left headers=COL3 width="50%"><span style="FONT-SIZE: 90%">给定 <em>fAttr</em> 值，对自变量 <em>vParam</em> 指定了无效的值。
            <p>
            <p>指定了无效的 <em>fAttr</em> 值。 </span></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.cppblog.com/prayer/aggbug/88284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2009-06-22 15:06 <a href="http://www.cppblog.com/prayer/archive/2009/06/22/88284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用ODBC API访问数据库</title><link>http://www.cppblog.com/prayer/archive/2008/10/23/64846.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 23 Oct 2008 09:45:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2008/10/23/64846.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/64846.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2008/10/23/64846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/64846.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/64846.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近工作需要，研究了一下ODBC API，并对它进行了简单的封装，下面介绍一下：假设有一个数据库表为：CREATE TABLE `testTable` (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/prayer/archive/2008/10/23/64846.html'>阅读全文</a><img src ="http://www.cppblog.com/prayer/aggbug/64846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2008-10-23 17:45 <a href="http://www.cppblog.com/prayer/archive/2008/10/23/64846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlcli.h DB2 CLI include file</title><link>http://www.cppblog.com/prayer/archive/2008/10/23/64775.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 23 Oct 2008 01:47:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2008/10/23/64775.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/64775.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2008/10/23/64775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/64775.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/64775.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: /*** START HEADER FILE SPECIFICATIONS *****************************//*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.cppblog.com/prayer/archive/2008/10/23/64775.html'>阅读全文</a><img src ="http://www.cppblog.com/prayer/aggbug/64775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2008-10-23 09:47 <a href="http://www.cppblog.com/prayer/archive/2008/10/23/64775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编辑词条SQLBindCol</title><link>http://www.cppblog.com/prayer/archive/2008/10/16/64184.html</link><dc:creator>Prayer</dc:creator><author>Prayer</author><pubDate>Thu, 16 Oct 2008 10:59:00 GMT</pubDate><guid>http://www.cppblog.com/prayer/archive/2008/10/16/64184.html</guid><wfw:comment>http://www.cppblog.com/prayer/comments/64184.html</wfw:comment><comments>http://www.cppblog.com/prayer/archive/2008/10/16/64184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/prayer/comments/commentRss/64184.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/prayer/services/trackbacks/64184.html</trackback:ping><description><![CDATA[SQLBindCol<br>
<div class=spctrl></div>
　　函数功能描述:将数据缓冲绑定到结果集的列<br>
<div class=spctrl></div>
　　说明：<br>
<div class=spctrl></div>
　　版本引入：ODBC 1.0<br>
<div class=spctrl></div>
　　遵从标准：ISO 92<br>
<div class=spctrl></div>
　　功能说明： SQLBindCol将应用程序的数据缓冲绑定到结果集的各列<br>
<div class=spctrl></div>
　　函数原型： SQLRETURN SQLBindCol(<br>
<div class=spctrl></div>
　　SQLHSTMT StatementHandle,<br>
<div class=spctrl></div>
　　SQLUSMALLINT ColumnNumber,<br>
<div class=spctrl></div>
　　SQLSMALLINT TargetType,<br>
<div class=spctrl></div>
　　SQLPOINTER TargetValuePtr,<br>
<div class=spctrl></div>
　　SQLINTEGER BufferLength,<br>
<div class=spctrl></div>
　　SQLLEN * StrLen_or_Ind);<br>
<div class=spctrl></div>
　　参数：<br>
<div class=spctrl></div>
　　StatementHandle<br>
<div class=spctrl></div>
　　[输入] 声明的句柄<br>
<div class=spctrl></div>
　　ColumnNumber<br>
<div class=spctrl></div>
　　[输入] 结果集里要绑定的列号。列号为从0开始递增的数字编号，第0列为书签列。如果没有使用书签――就是说，SQL_ATTR_USE_BOOKMARKS这个声明属性被置为SQL_UB_OFF――那么列号从1开始计数；<br>
<div class=spctrl></div>
　　TargetType<br>
<div class=spctrl></div>
　　[输入] *TargetValuePtr所指缓冲的C数据类型的标识符，当通过SQLFetch, SQLFetchScroll, SQLBulkOperations或 SQLSetPos从数据源取得数据的时候，驱动程序将数据转换成这个类型；当通过SQLBulkOperations或SQLSetPos发送数据到数据源时，驱动程序从这个类型来转换数据。<br>
<div class=spctrl></div>
　　TargetValuePtr<br>
<div class=spctrl></div>
　　[输入/输出] 用来绑定列的数据缓冲的指针。SQLFetch 和SQLFetchScroll返回数据到这个缓冲。当操作为SQL_FETCH_BY_BOOKMARK标识的时候SQLBulkOperations返回数据到这个缓冲。当操作为SQL_ADD 或 SQL_UPDATE_BY_BOOKMARK时，从这个缓冲取得数据。当操作为SQL_REFRESH时，SQLSetPos返回数据到这个缓冲中；当操作为SQL_UPDATE时，从这个缓冲取得数据。如果TargetValuePtr为一空指针，驱动程序取消列到数据缓冲的绑定。应用程序可通过SQL_UNBIND选项通过调用SQLFreeStmt来取消所有列的绑定。如果SQLBindCol调用的TargetValuePtr参数为空指针而StrLen_or_IndPtr是有效的值的话，应用程序可取消列的绑定但仍然存在一个该列的长度/指示缓冲绑定。<br>
<div class=spctrl></div>
　　BufferLength<br>
<div class=spctrl></div>
　　[输入] *TargetValuePtr指向的缓冲的字节数长度。驱动程序使用BufferLength来避免返回可变长数据如字符或二进制数时写过*TargetValuePtr的边界。注意驱动程序会在返回字符数据到*TargetValuePtr时计算空终止符。因此*TargetValuePtr缓冲就要包括空终止符的空间，否则驱动程序会截短数据。当驱动程序返回定长数据如整形数或一个数据结构时，驱动程序会忽略BufferLength参数并判断缓冲是否足够大来接收数据。因此很重要的是应用程序要分配一个足够大的缓冲给定长数据，否则驱动程序会写过缓冲的界。当BufferLength 小于0时SQLBindCol返回SQLSTATE HY090（无效的字符串或缓冲长度），等于0时不返回这个结果，可是，如果TargetType指定为一个字符类型，应用程序就不要将BufferLength设为0，因为ISO的CLI-适应的 驱动程序在这种情况下返回SQLSTATE HY090。<br>
<div class=spctrl></div>
　　StrLen_or_IndPtr<br>
<div class=spctrl></div>
　　[输入/输出] 指向绑定列的长度/指示缓冲。SQLFetch 和 SQLFetchScroll返回一个数值到这个缓冲。当操作为SQL_ADD，SQL_UPDATE_BY_BOOKMARK, 或 SQL_DELETE_BY_BOOKMARK时SQLBulkOperations从这个缓冲取得一个数值。当操作为SQL_FETCH_BY_BOOKMARK时SQLBulkOperations返回一个数值到这个缓冲，当操作为SQL_REFRESH时SQLSetPos返回一个数值到此缓冲；但操作为SQL_UPDATE时，它从这个缓冲取回一个数值。SQLFetch, SQLFetchScroll, SQLBulkOperations, 和 SQLSetPos可返回以下数值到长度/指示缓冲：<br>
<div class=spctrl></div>
　　l 返回数据的有效长度<br>
<div class=spctrl></div>
　　l SQL_NO_TOTAL<br>
<div class=spctrl></div>
　　l SQL_NULL_DATA<br>
<div class=spctrl></div>
　　应用程序可下列值放入长度/指示缓冲给供SQLBulkOperations 或SQLSetPos使用：<br>
<div class=spctrl></div>
　　l 待发送数据的长度<br>
<div class=spctrl></div>
　　l SQL_NTS<br>
<div class=spctrl></div>
　　l SQL_NULL_DATA<br>
<div class=spctrl></div>
　　l SQL_DATA_AT_EXEC<br>
<div class=spctrl></div>
　　l SQL_LEN_DATA_AT_EXEC宏的结果<br>
<div class=spctrl></div>
　　l SQL_COLUMN_IGNORE<br>
<div class=spctrl></div>
　　如果指示缓冲和长度缓冲是分开的缓冲区的话，指示缓冲只能返回SQL_NULL_DATA，而长度缓冲可返回所有其他的值。如果StrLen_or_IndPtr为一个空指针，那么没有可用的长度或指示值。这是当取数据且数据为NULL时的一个错误。<br>
<div class=spctrl></div>
　　返回值：<br>
<div class=spctrl></div>
　　SQL_SUCCESS,SQL_SUCCESS_WITH_INFO,SQL_ERROR,或SQL_INVALID_HANDLE.<br>
<div class=spctrl></div>
　　备注：此SDK函数的使用涉及到很多相关的部分，请使用者一定要认真仔细。<br>
<div class=spctrl></div>
　　示例代码：<br>
<div class=spctrl></div>
　　#define NAME_LEN 50<br>
<div class=spctrl></div>
　　#define PHONE_LEN 10<br>
<div class=spctrl></div>
　　SQLCHAR szName[NAME_LEN], szPhone[PHONE_LEN];<br>
<div class=spctrl></div>
　　SQLINTEGER sCustID, cbName, cbCustID, cbPhone;<br>
<div class=spctrl></div>
　　SQLHSTMT hstmt;<br>
<div class=spctrl></div>
　　SQLRETURN retcode;<br>
<div class=spctrl></div>
　　retcode = SQLExecDirect(hstmt,<br>
<div class=spctrl></div>
　　"SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3", <br>
<div class=spctrl></div>
　　SQL_NTS);<br>
<div class=spctrl></div>
　　if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) <br>
<div class=spctrl></div>
　　{<br>
<div class=spctrl></div>
　　/* Bind columns 1, 2, and 3 */<br>
<div class=spctrl></div>
　　SQLBindCol(hstmt, 1, SQL_C_ULONG, &amp;sCustID, 0, &amp;cbCustID);<br>
<div class=spctrl></div>
　　SQLBindCol(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &amp;cbName);<br>
<div class=spctrl></div>
　　SQLBindCol(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN, &amp;cbPhone);<br>
<div class=spctrl></div>
　　/* Fetch and print each row of data. On */<br>
<div class=spctrl></div>
　　/* an error, display a message and exit. */<br>
<div class=spctrl></div>
　　while (TRUE) <br>
<div class=spctrl></div>
　　{<br>
<div class=spctrl></div>
　　retcode = SQLFetch(hstmt);<br>
<div class=spctrl></div>
　　if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) <br>
<div class=spctrl></div>
　　{<br>
<div class=spctrl></div>
　　show_error();<br>
<div class=spctrl></div>
　　}<br>
<div class=spctrl></div>
　　if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)<br>
<div class=spctrl></div>
　　{<br>
<div class=spctrl></div>
　　fprintf(out, "%-*s %-5d %*s", NAME_LEN-1, szName,<br>
<div class=spctrl></div>
　　sCustID, PHONE_LEN-1, szPhone);<br>
<div class=spctrl></div>
　　} <br>
<div class=spctrl></div>
　　else <br>
<div class=spctrl></div>
　　{<br>
<div class=spctrl></div>
　　break;<br>
<div class=spctrl></div>
　　}<br>
<div class=spctrl></div>
　　}<br>
<div class=spctrl></div>
　　}<br>
<img src ="http://www.cppblog.com/prayer/aggbug/64184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/prayer/" target="_blank">Prayer</a> 2008-10-16 18:59 <a href="http://www.cppblog.com/prayer/archive/2008/10/16/64184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>