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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 编程 » 嵌入式 SQL » SQL 通信区域 (SQLCA)

 

使用多个 SQLCA

不要使用可生成非重入代码的 SQL 预处理器选项 (-r-)。由于无法使用静态初始化的全局变量,因此重入代码稍大且速度稍慢。不过,这些影响是很小的。

在程序中使用的每个 SQLCA 都必须调用 db_init 进行初始化,并在结尾处调用 db_fini 清除它。

嵌入式 SQL 语句 SET SQLCA 用于通知 SQL 预处理器对数据库请求使用不同的 SQLCA。通常,会在程序顶部或头文件中使用类似 EXEC SQL SET SQLCA 'task_data->sqlca'; 的语句,将 SQLCA 引用设置为指向任务特定的数据。由于此语句不生成任何代码,因而不影响性能。它更改预处理器内的状态,以便对 SQLCA 的任何引用都使用给定的字符串。

每个线程都必须具有自己的 SQLCA。此要求也适用于使用嵌入式 SQL、并被应用程序中的多个线程调用的共享库(例如一个 DLL)中的代码。

您可以在任一受支持的嵌入式 SQL 环境中使用多个 SQLCA 支持,但仅在重入代码中要求这样做。

您无需使用多个 SQLCA 以连接到多个数据库或具有到单个数据库的多个连接。

每个 SQLCA 都可以具有一个未命名的连接。每个 SQLCA 都具有一个活动的或当前的连接。

在所给定数据库连接上进行的所有操作都必须使用建立数据库连接时所使用的同一个 SQLCA。

注意

不同连接上的操作受常规记录锁定机制的影响,并且可能导致互相阻塞,甚至可能导致死锁。

 另请参见