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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere ODBC API » 执行 SQL 语句

 

执行包含绑定参数的语句

本节介绍如何使用绑定参数为语句参数设置运行时的值,来构造和执行 SQL 语句。

♦  在 ODBC应用程序中执行包含绑定参数的 SQL 语句
  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;
    SQLCHAR deptName[ DEPT_NAME_LEN + 1 ];
    SQLSMALLINT deptID, managerID;
    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) ;

此外,还可以为准备语句使用绑定参数,从而为需要执行多次的语句带来更好的性能。有关详细信息,请参见执行预准备语句

上述代码段不包括错误检查。有关包括错误检查的完整示例,请参见 samples-dir\SQLAnywhere\ODBCExecute\odbcexecute.cpp

有关 SQLExecDirect 的详细信息,请参见 Microsoft ODBC 程序员参考中的 [external link] SQLExecDirect