当启用 OPTMSG 功能时,GBase 8s ODBC 不会对任何连接的语句执行错误处理。
如果您不确定某个特定语句是否会产生错误,则在代码中包含错误处理语句,并不要为此
语句启用消息链接。
当链接语句中发生错误后,
数据库服务器停止后续语句的执行。
例如,
在以下代码片段中,
它试图链接五条 INSERT 语句:
SQLExecDirect(hstmt, "create table tab1 (col1 INTEGER)", SQL_NTS);
/* enable message chaining */
SQLSetStmtOption(hstmt, SQL_INFX_ATTR_OPTMSG, 1);
/* these two INSERT statements execute successfully */
SQLExecDirect(hstmt, "insert into tab1 values (1)", SQL_NTS);
SQLExecDirect(hstmt, "insert into tab1 values (2)", SQL_NTS);
/* this INSERT statement generates an error because the data
* in the VALUES clause is not compatible with the column type */
SQLExecDirect(hstmt, "insert into tab1 values ('a')", SQL_NTS);
/* these two INSERT statements never execute */
GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 200 -
SQLExecDirect(hstmt, "insert into tab1 values (3)", SQL_NTS);
SQLExecDirect(hstmt, "insert into tab1 values (4)", SQL_NTS);
/* disable message chaining */
SQLSetStmtOption(hstmt, SQL_INFX_ATTR_OPTMSG, 0);
/* commit work */
rc = SQLEndTran (SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
if (rc != SQL_SUCCESS)
在此示例中,会发生以下操作:
l
驱动程序将这五个 INSERT 语句和 COMMIT WORK 语句发送到数据库服务器执
行。
l
数据库将 1 和 2 的 col1 值插入到 tab1 表中。
l
第三条 INSERT 语句产生错误,因此数据服务器不会执行后续的 INSERT 语句或
COMMIT WORK 语句。
l
当队列到达 SQLEndTran 函数,驱动程序刷新消息队列。
l
SQLEndTran 函数,它是链接语句中的最后一条语句,返回失败的 INSERT 语句的
错误。
如果需要保存数据库服务器插入到 col1 的值,必须自己提交它们。
GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 201 -
9 错误消息
本主题描述 GBase 8s ODBC Driver 错误消息。
本主题提供以下信息:
l 诊断 SQLSTATE 值
l 映射到 GBase 8s 错误消息的 SQLSTATE 值
l GBase 8s ODBC Driver 错误消息映射到特定的 SQLSTATE 值
有关错误消息的描述,请使用 finderr 实用程序。