当启用 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 的值,必须自己提交它们。