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

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » ODBC 支持 » SQL 语句的执行方式

 

执行预准备语句

执行预准备语句可提高重复使用的语句的性能。

前提条件

要成功运行该示例,需要以下系统特权。

  • Departments 表的 INSERT 特权

 任务
  1. 使用 SQLPrepare 准备语句。

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

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

    在此示例中:

    • rc   接收返回代码,应测试这些代码来检查操作是成功还是失败。

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

    • ?   问号是表示语句参数的占位符。将占位符放入语句中是为了指明要访问的主机变量的位置。占位符可以是问号 (?),也可以是主机变量引用(主机变量名之前有一个冒号)。后一种情况下,在语句的实际文本中使用的主机变量名仅充当占位符,表示将会绑定对应的参数。它不需要与实际参数名一致。

  2. 使用 SQLBindParameter 绑定语句参数值。

    例如,以下函数调用将绑定 DepartmentID 变量的值:



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

    在此示例中:

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

    • stmt   是语句句柄。

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

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

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

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

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

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

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

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

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

  4. 执行该语句:

    rc = SQLExecute( stmt );

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

  5. 删除语句。

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

结果

应用程序在构建和运行时执行预准备语句。

下一个

上述代码段不包括错误检查。有关完整示例(包括错误检查示例),请参见 %SQLANYSAMP16%\SQLAnywhere\ODBCPrepare\odbcprepare.cpp

有关 SQLPrepare 的详细信息,请参见 Microsoft 的ODBC API Reference中的 SQLPrepare,网址为 [external link] http://msdn.microsoft.com/zh-cn/library/ms710926.aspx

 另请参见