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 语句的执行方式

 

执行包含绑定参数的语句

使用绑定参数构造和执行 SQL 语句,从而为语句参数设置运行时的值。此外,还可以为准备语句使用绑定参数,从而为需要执行多次的语句带来更好的性能。

前提条件

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

  • Departments 表的 INSERT 特权

 任务
  1. 使用 SQLAllocHandle 为该语句分配一个句柄。

    例如,以下语句在具有句柄 dbc 的连接上分配了一个类型为 SQL_HANDLE_STMT、名称为 stmt 的句柄:

    SQLAllocHandle( SQL_HANDLE_STMT, dbc, &stmt );
  2. 使用 SQLBindParameter 为语句捆绑参数。

    例如,以下几行代码声明一些变量,这些变量用于存储部门 ID、部门名称和管理人员 ID 以及语句字符串的值。然后,这些代码将参数绑定到使用 stmt 语句句柄执行的语句的第一个、第二个和第三个参数上。



    #defined DEPT_NAME_LEN 40
    SQLLEN cbDeptID = 0, cbDeptName = SQL_NTS, cbManagerID = 0;
    SQLSMALLINT deptID, managerID;
    SQLCHAR deptName[ DEPT_NAME_LEN + 1 ];
    
    SQLCHAR insertstmt[ STMT_LEN ] =
      "INSERT INTO Departments "
      "( DepartmentID, DepartmentName, DepartmentHeadID ) "
      "VALUES (?, ?, ?)"; 
    
    SQLBindParameter( stmt, 1, SQL_PARAM_INPUT,
        SQL_C_SSHORT, SQL_INTEGER, 0, 0,
        &deptID, 0, &cbDeptID );
    SQLBindParameter( stmt, 2, SQL_PARAM_INPUT,
        SQL_C_CHAR, SQL_CHAR, DEPT_NAME_LEN, 0,
        deptName, 0,&cbDeptName );
    SQLBindParameter( stmt, 3, SQL_PARAM_INPUT,
        SQL_C_SSHORT, SQL_INTEGER, 0, 0,
        &managerID, 0, &cbManagerID );
  3. 为参数赋值。

    例如,下面几行代码为第 2 步代码段的参数赋值。

    deptID = 201;
    strcpy( (char * ) deptName, "Sales East" );
    managerID = 902;

    通常,设置这些变量是为了响应用户操作。

  4. 使用 SQLExecDirect 执行语句。

    例如,以下几行代码执行语句句柄 stmt 上的 insertstmt 中具有的语句字符串。

    SQLExecDirect( stmt, insertstmt, SQL_NTS );

结果

应用程序在构建和运行时执行 SQL 语句。

下一个

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

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

 另请参见