`

DB2 通用数据库 iSeries 版 SQL 调用层接口(ODBC)

    博客分类:
  • DB2
阅读更多

DB2 通用数据库 iSeries 版 SQL 调用层接口(ODBC)

 

SQLPrepare — 准备语句

 

用途

SQLPrepare() 使 SQL 语句与输入语句句柄相关联并将该语句发送至 DBMS 以进行准备。应用程序可以通过将该语句句柄传送给其它函数来引用这个准备好的语句。

如果已将语句句柄与 SELECT 语句配合使用,则在调用 SQLPrepare() 之前,必须调用 SQLFreeStmt() 来关闭游标。

语法

SQLRETURN SQLPrepare (SQLHSTMT       hstmt,
                      SQLCHAR        *szSqlStr,
                      SQLINTEGER     cbSqlStr);

函数自变量 

表 129. SQLPrepare 自变量

数据类型自变量使用描述
SQLHSTMT hstmt 输入 语句句柄。一定不能有打开的游标与 hstmt 相关联。
SQLCHAR * szSqlStr 输入 SQL 语句字符串
SQLINTEGER cbSqlStr 输入 szSqlStr 自变量的内容的长度。

必须将此长度设置为 szSqlstr 中的 SQL 语句的精确长度,或者,如果语句文本以空终止,则设置为 SQL_NTS。

用法

在使用 SQLPrepare() 准备语句之后,应用程序可通过调用下列函数来请求关于结果集的格式的信息(如果该语句是 SELECT 语句的话):

  • SQLNumResultCols()
  • SQLDescribeCol()
  • SQLColAttributes()

可通过调用 SQLExecute() 来将准备好的语句执行一次或多次。在将该语句句柄与另一个SQLPrepare()SQLExecDirect()SQLColumns()SQLSpecialColumns()SQLStatistics() 或 SQLTables() 配合使用之前,该 SQL 语句将保持与该句柄相关联。

SQL 语句字符串可包含参数标记。参数标记由“?”字符表示,它用来指示语句中的一个位置,在调用 SQLExecute() 时,将在该位置替代应用程序变量的值。SQLBindParam() 用来将应用程序变量绑定到每个参数标记(使应用程序变量与参数标记相关联),以及指示在传送数据时是否应该执行任何数据转换。

SQL 语句不能是 COMMIT 或 ROLLBACK。必须通过调用 SQLTransact() 来发出 COMMIT 或 ROLLBACK。

如果 SQL 语句是定位型 DELETE 或定位型 UPDATE,则必须在同一个连接句柄下的单独语句句柄上定义该语句所引用的游标。

返回码

  • SQL_SUCCESS
  • SQL_SUCCESS_WITH_INFO
  • SQL_ERROR
  • SQL_INVALID_HANDLE

诊断 

表 130. SQLPrepare SQLSTATE

SQLSTATE描述说明
24000 游标状态无效 在指定的 hstmt 上存在打开的游标。
37xxx 语法错误或访问违例 szSqlStr 包含下列其中一项或多项:
  • COMMIT
  • ROLLBACK
  • 所连接的数据库服务器未能准备的 SQL 语句
  • 包含语法错误的语句
HY001 内存分配失败 驱动程序无法分配支持此函数的执行或完成所必需的内存。
HY009 自变量值无效 szSqlStr 是空指针。

 

自变量 cbSqlStr 小于 1,但不等于 SQL_NTS。

HY013 * 内存管理问题 驱动程序无法访问支持此函数的执行或完成所必需的内存。
注意:
并非所有 DBMS 在进行准备时都报告上述所有诊断消息。因此,应用程序在调用 SQLExecute() 时还必须能够处理这些情况。

示例

有关以下示例中使用的 check_error、initialize 和 terminate 函数的列表,请参考示例:交互式 SQL 和等价的 DB2 UDB CLI 函数调用

/*************************************************************************
** file = prepare.c
**
** Example of preparing then repeatedly executing an SQL statement.
**
** Functions used:
**
**        SQLAllocConnect      SQLFreeConnect
**        SQLAllocEnv          SQLFreeEnv
**        SQLAllocStmt         SQLFreeStmt
**        SQLConnect           SQLDisconnect
**
**        SQLBindCol           SQLFetch
**        SQLTransact          SQLError
**        SQLPrepare           SQLSetParam
**        SQLExecute
**************************************************************************/
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sqlcli.h"
 
#define MAX_STMT_LEN 255
 
int initialize(SQLHENV *henv,
               SQLHDBC *hdbc);
 
int terminate(SQLHENV henv,
              SQLHDBC hdbc);
 
int print_error (SQLHENV    henv,
                 SQLHDBC    hdbc,
                 SQLHSTMT   hstmt);
 
int check_error (SQLHENV    henv,
                 SQLHDBC    hdbc,
                 SQLHSTMT   hstmt,
                 SQLRETURN  rc);
 
/*******************************************************************
** main
** - initialize
** - terminate
*******************************************************************/
int main()
{
    SQLHENV     henv;
    SQLHDBC     hdbc;
    SQLCHAR     sqlstmt[MAX_STMT_LEN + 1]="";
    SQLRETURN   rc;
 
    rc = initialize(&henv, &hdbc);
    if (rc == SQL_ERROR) return(terminate(henv, hdbc));
 
    {SQLHSTMT   hstmt;
     SQLCHAR    sqlstmt[]="SELECT deptname, location from org where division = ?";
     SQLCHAR    deptname[15],
                location[14],
                division[11];
 
     SQLINTEGER rlength,
                plength;
 
        rc = SQLAllocStmt(hdbc, &hstmt);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, SQL_NULL_HSTMT, rc);
 
        /* prepare statement for multiple use */
        rc = SQLPrepare(hstmt, sqlstmt, SQL_NTS);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
 
        /* bind division to parameter marker in sqlstmt */
        rc = SQLSetParam(hstmt, 1, SQL_CHAR, SQL_CHAR, 10, 10, division,
                     &plength);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
 
        /* bind deptname to first column in the result set */
        rc = SQLBindCol(hstmt, 1, SQL_CHAR, (SQLPOINTER) deptname, 15,
                        &rlength);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
        rc = SQLBindCol(hstmt, 2, SQL_CHAR, (SQLPOINTER) location, 14,
                         &rlength);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
 
        printf("\nEnter Division Name or 'q' to quit:\n");
        printf("(Eastern, Western, Midwest, Corporate)\n");
        gets(division);
        plength = SQL_NTS;
 
        while(division[0] != 'q')
        {
            rc = SQLExecute(hstmt);
            if (rc != SQL_SUCCESS )
                check_error (henv, hdbc, hstmt, rc);
 
            printf("Departments in %s Division:\n", division);
            printf("DEPTNAME       Location\n");
            printf("-------------- -------------\n");
 
            while ((rc = SQLFetch(hstmt)) == SQL_SUCCESS)
            {
                printf("%-14.14s %-13.13s \n", deptname, location);
            }
            if (rc != SQL_NO_DATA_FOUND )
                check_error (henv, hdbc, hstmt, rc);
            SQLFreeStmt(hstmt, SQL_CLOSE);
            printf("\nEnter Division Name or 'q' to quit:\n");
            printf("(Eastern, Western, Midwest, Corporate)\n");
            gets(division);
        }
    }
 
    rc = SQLTransact(henv, hdbc, SQL_ROLLBACK);
    if (rc != SQL_SUCCESS )
        check_error (henv, hdbc, SQL_NULL_HSTMT, rc);
 
    terminate(henv, hdbc);
    return (0);
}/* end main */

参考

 

 


页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]

分享到:
评论

相关推荐

    DB2 Universal Database for iSeries SQL Reference V5R3

    DB2 Universal Database for iSeries SQL Reference V5R3

    IBM.Data.DB2.iSeries.dll

    C#连DB2库文件IBM.Data.DB2.iSeries.dll

    数据库提示工具 sqlassist 6.5原版安装文件及其KEY

    数据库开发必备软件,全面支持常用数据库 Oracle 8i, 9i, 10g, 11g Microsoft SQL Server 2000, 2005, 2008, 2012, 2014 Windows SQL Azure 11 DB2 UDB 7.x, 8.x, 9.x, 10.x DB2 UDB for iSeries 5.x, 6.x, 7.x, 8.x...

    db2_Database_administration_for_iSeries

    db2_Database_administration_for_iSeriesdb2_Database_administration_for_iSeriesdb2_Database_administration_for_iSeriesdb2_Database_administration_for_iSeriesdb2_Database_administration_for_iSeries

    sql assist 9.5.rar

    支持10个主要的数据库系统:Oracle, SQL Server, DB2 UDB, DB2 for iSeries, Sybase ASE, Sybase SQL Anywhere, Postgre SQL, Amazon Redshift, MySQL, Microsoft Access等等 1、拥有可视SQL查询生成器 2、可轻松...

    AS400_DB2驱动

    AS400_DB2驱动

    Microsoft SQL 数据库连接字符串大全.pdf

    连接字符串官方文档:SQL Server,SQL Server 2005,ACCESS,Oracle,MySQL,Interbase,IBM DB2,Sybase,Informix,Ingres,Mimer SQL,Lightbase,PostgreSQL,Paradox,DNS,Firebird,Excel ,Text,DBF / ...

    Aqua.Data.Studio.v7.5 --1

    [资源已经测试 一切均...该软件支持 Windows、Mac OSX、Linux、Solaris 和 Java 平台上的 Oracle、DB2 for LUW、DB2 for iSeries、Microsoft SQL Server、MySQL、Sybase、Informix、Apache Derby 和 PostgreSQL 工具。

    Aqua.Data.Studio.v7.5 --3

    [资源已经测试 一切均...该软件支持 Windows、Mac OSX、Linux、Solaris 和 Java 平台上的 Oracle、DB2 for LUW、DB2 for iSeries、Microsoft SQL Server、MySQL、Sybase、Informix、Apache Derby 和 PostgreSQL 工具。

    Aqua.Data.Studio.v7.5 --2

    [资源已经测试 一切均...该软件支持 Windows、Mac OSX、Linux、Solaris 和 Java 平台上的 Oracle、DB2 for LUW、DB2 for iSeries、Microsoft SQL Server、MySQL、Sybase、Informix、Apache Derby 和 PostgreSQL 工具。

    SQL Assistant v9.1.261

    9.x, 10.x, 11.x DB2 UDB for iSeries 5.x, 6.x, 7.x SAP Sybase Adaptive Server Enterprise 12.x, 15.x SAP Sybase SQL Anywhere 9.x to 14.x (formerly Adaptive Server Anywhere) PostgreSQL 8.x, 9.x Amazon ...

    SoftTree SQL Assistant 9.0.199 (x86/x64)

    DB2 UDB for iSeries 5.x, 6.x, 7.x SAP Sybase Adaptive Server Enterprise 12.x, 15.x SAP Sybase SQL Anywhere 9.x to 14.x (formerly Adaptive Server Anywhere) PostgreSQL 8.x, 9.x Amazon Redshift 1.0.x ...

    IBM eServer iSeries 通用方案建议书

    第 4 章、为何选择IBM eServer iSeries……………………7 4.1、iSeries突出特点……………………8 4.2、先进的体系结构和性能……………………9 4.3、iSeries应用系统实现方式……………………11 4.4、双机热备份...

    sqlines-master.zip

    Oracle and Oracle Exadata Microsoft SQL Server and Microsoft Azure SQL MySQL MariaDB PostgreSQL Amazon Redshift, Amazon Aurora, Amazon RDS and Amazon Athena IBM DB2 LUW, iSeries (AS/400) and zSeries ...

    IBM iSeries 通用方案建议书

    本建议书体现了我们希望通过IBM iSeries解决方案帮助系统集成商工程师实现其业务目标的愿望。

    SQL Assistant v6.0 (含注册机/注册码)

    DB2 UDB for iSeries MySQL 5.x Sybase ASE 12.x, 15.x Sybase ASA 7, 8, 9, 10, 11, 12 PostgreSQL 8.x, 9.x Microsoft Access 2003, 2007, 2010 Pre-configured targets: SQL Server Management Studio ...

    DB2 AS400 驱动包

    DB2 AS400 驱动包

    IBM某员工透漏DB2笔记

    超经典,不下别后悔,内含超值知识点,IBM内部sql经典知识,还有内部讲义,即可让同学学习使用,又可以让老师讲课做讲义,非常超值!!!!

    db2-driver

    DB2的JDBC TYPE 2 驱动使 Java 应用程序通过JDBC调用DB2.对 DB2 JDBC type 2 driver 的调用被转换成 Java 本地方法.Java 使用这种驱动程序的应用程序必须运行在一个 DB2 客户机上,JDBC 请求通过这个客户机转到 DB2 ...

    iSeries 备份服务器(中文版)

    IBM iSeries 备份服务器(中文版)

Global site tag (gtag.js) - Google Analytics