Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 编程 » ODBC 支持 » 执行 SQL 语句

 

执行预准备语句

预准备语句可提高重复使用的语句的性能。ODBC 为使用预准备语句提供了一整套函数。

有关预准备语句的简介,请参见准备语句

 ♦  执行预准备 SQL 语句
  1. 使用 SQLPrepare 准备语句。

    例如,下面的代码段说明如何准备 INSERT 语句:

    SQLRETURN   retcode;
    SQLHSTMT    stmt;
    retcode = SQLPrepare( stmt,
                "INSERT INTO Departments
                 ( DepartmentID, DepartmentName, DepartmentHeadID )
                 VALUES (?, ?, ?,)",
              SQL_NTS);

    在此示例中:

    • retcode   包含返回代码,应测试这些代码来检查操作是成功还是失败。

    • stmt   提供语句句柄,供以后引用。

    • ?   问号是表示语句参数的占位符。

  2. 使用 SQLBindParameter 设置语句参数值。

    例如,以下函数调用设置 DepartmentID 变量的值:



    SQLBindParameter( stmt,
                     1,
                     SQL_PARAM_INPUT,
                     SQL_C_SSHORT,
                     SQL_INTEGER,
                     0,
                     0,
                     &sDeptID,
                     0,
                     &cbDeptID);

    在此示例中:

    • stmt   是语句句柄。

    • 1   指示此调用设置第一个占位符的值。

    • SQL_PARAM_INPUT   指示该参数是输入语句。

    • SQL_C_SHORT   指示该应用程序中正在使用的 C 数据类型。

    • SQL_INTEGER   指示数据库中正在使用的 SQL 数据类型。

      接下来的两个参数指示列的精度和小数位数:对于整数,这两个参数均为零。

    • &sDeptID   是指向参数值缓冲区的指针。

    • 0   指示缓冲区的长度,以字节计。

    • &cbDeptID   是指向参数值长度缓冲区的指针。

  3. 捆绑其它两个参数并给 sDeptId 赋值。

  4. 执行该语句:

    retcode = SQLExecute( stmt);

    第 2 至 4 步可重复执行多次。

  5. 删除语句。

    删除语句将释放与语句本身相关联的资源。使用 SQLFreeHandle 可以删除语句。

有关包括错误检查的完整示例,请参见 samples-dir\SQLAnywhere\ODBCPrepare\odbcprepare.cpp

有关 SQLPrepare 的更多信息,请参见 Microsoft ODBC API 参考中的 SQLPrepare ([external link] http://msdn.microsoft.com/en-us/library/ms710926.aspx)。