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 (中文) » UltraLite - C 和 C++ 编程 » 应用程序开发 » UltraLite C++ 应用程序开发 » 使用 SQL 语句创建和修改数据 » 使用 INSERT、UPDATE 和 DELETE 修改数据

 

更新表中的行

UltraLite 使用 ? 字符表示查询参数。对于任何 INSERT、UPDATE 或 DELETE 语句,每个 ? 都是根据其在预准备语句中的序号位置引用的。例如,第一个 ? 引用为参数 1,第二个引用为参数 2。

前提条件

执行此任务没有前提条件。

 任务
  1. 使用以下代码声明 ULPreparedStatement:

    ULPreparedStatement * prepStmt;
  2. 准备要执行的 SQL 语句。

    以下代码准备要执行的 UPDATE 语句:

    prepStmt = conn->PrepareStatement("UPDATE MyTable SET MyColumn = ? WHERE MyColumn = ?");
  3. 准备语句时检查错误。

    例如,以下代码适用于检查 SQL 语法错误:

    if( prepStmt == NULL ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  4. 设置替换预准备语句中 ? 字符的值。

    以下代码在检查错误时将 ? 字符设置为整数值。例如,当参数序号超出预准备语句中的参数个数范围时,将捕获错误。



    bool success;
    success = prepStmt->SetParameterInt( 1, 25 );
    if( success ) {
        success = prepStmt->SetParameterInt( 2, -1 );
    }
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  5. 执行预准备语句,更新数据库中的数据。

    以下代码可检查执行语句后可能出现的错误。例如,如果唯一索引中发现重复的索引值,将返回错误。

    success = prepStmt->ExecuteStatement();
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
    } else {
        // if you are interested in the number of rows updated ...
        ul_u_long rowsUpdated = prepStmt->GetRowsAffectedCount();
    }
  6. 清理预准备语句资源。

    以下代码可释放预准备语句对象使用的资源。调用 Close 方法后,不能再访问此对象。

    prepStmt->Close();
  7. 将数据提交到数据库。

    以下代码可将数据保存到数据库,并防止数据丢失。如果设备应用程序在应用程序完成提交调用前意外终止,来自第 5 步的数据将丢失。

    conn->Commit();

结果

在这种情况下,MyColumn 值为 -1 的 MyTable 中的行条目已更新。值更新为 25。