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

SQL Anywhere 11.0.1 (中文) » UltraLite - C 及 C++ 编程 » API 参考 » UltraLite C/C++ 公共 API 参考

 

ULRegisterSQLPassthroughCallback 的回调函数

此回调函数可在 SQL 直通脚本执行期间提供脚本执行进度(状态)。

语法
void ul_sql_passthrough_observer_fn( ul_sql_passthrough_status * status ); 
参数
  • ul_sql_passthrough_status   提供脚本的当前执行状态,包括状态、要执行的脚本数、当前正在执行的脚本以及注册调用中提供的任何用户数据。

示例

进度观察器回调函数定义如下:

typedef void(UL_CALLBACK_FN * ul_sql_passthrough_observer_fn)
    (ul_sql_passthrough_status * status);

ul_sql_passthrough_status 结构定义如下:

typedef struct {
    ul_sql_passthrough_state	   state; // current state
    ul_u_long   script_count;          // total number of scripts to execute
    ul_u_long   cur_script;            // current script being executed (1-based)
    ul_bool     stop;                  // set to true to stop script execution
                                       // can only be set in the starting state
    ul_void *   user_data;             // user data provided in register call
    SQLCA *     sqlca;
} ul_sql_passthrough_status;

进度观察器回调函数通过以下方法注册:

UL_FN_SPEC ul_ret_void UL_FN_MOD ULRegisterSQLPassthroughCallback(
SQLCA *                         sqlca,
ul_sql_passthrough_observer_fn  callback,
ul_void *                       user_data );

以下为示例回调函数以及调用 ULRegisterSQLPassthroughCallback 的代码:

static void UL_GENNED_FN_MOD passthroughCallback(ul_sql_passthrough_status * status) {
    switch( status->state ) {
        case UL_SQL_PASSTHROUGH_STATE_STARTING:
            printf( "SQL Passthrough script execution starting\n" );
            break;
        case UL_SQL_PASSTHROUGH_STATE_RUNNING_SCRIPT:
            printf( "Executing script %d of %d\n", status->cur_script, status->script_count );
            break;
        case UL_SQL_PASSTHROUGH_STATE_DONE:
            printf( "Finished executing SQL Passthrough scripts\n" );
            break;
        default:
            printf( "SQL Passthrough script execution has failed\n" );
            break;
    }
}

int main() {
    ULSqlca sqlca;

    sqlca.Initialize();
    ULRegisterSQLPassthroughCallback( sqlca.GetCA(), passthroughCallback, NULL );
    DatabaseManager * dm = ULInitDatabaseManager( sqlca );
    ...
}
返回值

返回以下操作之一 (*** Are these valid? ***):

  • UL_ERROR_ACTION_CANCEL   取消引发错误的操作。

  • UL_ERROR_ACTION_CONTINUE   继续执行,忽略引发错误的操作。

  • UL_ERROR_ACTION_DEFAULT   行为与没有错误回调时一样。

  • UL_ERROR_ACTION_TRY_AGAIN   重试引发错误的操作。

另请参见