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 参考

 

ULRegisterErrorCallback 函数

注册处理错误的回调函数。

语法
void ULRegisterErrorCallback (
    SQLCA * sqlca,
    ul_error_callback_fn callback,
    ul_void *   user_data,
    ul_char *   buffer,
    size_t   len 
);
参数
  • sqlca   指向 SQL 通信区的指针。

    在 C++ API 中使用 Sqlca.GetCA 方法。

  • callback   回调函数的名称。有关此函数的原型的详细信息,请参见ULRegisterErrorCallback 的回调函数

    回调值 UL_NULL 禁用任何以前注册的回调函数。

  • user_data   全局变量的一个替代,使任何上下文信息在全局范围内均可访问。这是必需的,因为您可以从应用程序中的任何位置调用回调函数。UltraLite 不修改提供的数据,它只是在回调函数被调用时将这些数据传递给回调函数。

    您可以声明任何数据类型,然后在回调函数中将其转换为正确的类型。例如,可以在回调函数中添加一行以下形式的代码:

    MyContextType * context = (MyContextType *)user_data;

  • buffer   一个保存错误消息的替代参数的字符数组,包括空终止符。为了使 UltraLite 尽可能小,UltraLite 不提供错误消息。替代参数取决于特定的错误。有关完整列表,请参见SQL Anywhere 错误消息

    只要 UltraLite 是活动的,buffer 就必须存在。如果您不想接收参数信息,则提供 UL_NULL。

  • len   buffer(前述参数)的长度,以 ul_char 字符为单位。值为 100 时足以容纳大多数错误参数。如果 buffer 太小,则截断参数。

注释

调用此函数后,只要 UltraLite 发出错误信号,就会调用用户提供的回调函数。因此,应在初始化 SQLCA 之后立即调用 ULRegisterErrorCallback。

使用此回调技术处理错误在开发过程中尤其有用,因为它能够确保就出现的任何错误和所有错误向您的应用程序发出通知。但是,此回调函数不控制执行流,所以在对 UltraLite 函数的所有调用完成之后,应用程序应该检查 SQLCA 中的 SQLCODE 字段。

示例

下面的代码为 UltraLite C++ 组件应用程序注册一个回调函数:

int main() {
    ul_char buffer[100];
    DatabaseManager * dm;
    Connection * conn;
    Sqlca.Initialize();
    ULRegisterErrorCallback(
        Sqlca.GetCA(),
        MyErrorCallBack,
        UL_NULL,
        buffer,
        sizeof (buffer) );
    dm = ULInitDatabaseManager( Sqlca );
    ...
}

以下是一个示例回调函数:

ul_error_action UL_GENNED_FN_MOD MyErrorCallBack(
    SQLCA *     Sqlca,
    ul_void *   user_data,
    ul_char *   message_param )
{
    ul_error_action rc = 0;
    (void) user_data;
    
    switch( Sqlca->sqlcode ) {
        // The following error is used for flow control - don't report it here
        case SQLE_NOTFOUND:
            break;
        case SQLE_ULTRALITE_DATABASE_NOT_FOUND:
            _tprintf( _TEXT( "Error %ld: Database file %s not found\n" ), Sqlca->sqlcode, message_param ); 
            break;  
        default:
            _tprintf( _TEXT( "Error %ld: %s\n" ), Sqlca->sqlcode, message_param ); 
        break;
     }
    return rc;
}
另请参见