ODBC:事务 梦里梦外; 2022-04-16 01:40 170阅读 0赞 **目录** 一、有哪些与事务相关的属性? 二、如何读取和设置这些属性? 三、设置为手动提交后,如何提交事务? -------------------- ### 一、有哪些与事务相关的属性? ### 事务属性、属性可取值、以及表示的含义: > **SQL\_TXN\_CAPABLE SQLUSMALLINT,表示是否支持事务** > SQL\_TC\_NONE 不支持事务 > SQL\_TC\_DML 只支持DML,不支持DDL > SQL\_TC\_DDL\_COMMIT 支持DML,遇到DDL就提交 > SQL\_TC\_DDL\_IGNORE 支持DML,遇到DDL就忽略 > SQL\_TC\_ALL 支持DML和DDL > **SQL\_TXN\_ISOLATION\_OPTION SQLUINTEGER,表示支持哪些事务隔离级别** > SQL\_TXN\_READ\_UNCOMMITTED > SQL\_TXN\_READ\_COMMITTED > SQL\_TXN\_REPEATABLE\_READ > SQL\_TXN\_SERIALIZABL > **SQL\_DEFAULT\_TXN\_ISOLATION SQLUINTEGER,表示默认的事务隔离级别** > SQL\_TXN\_READ\_UNCOMMITTED > SQL\_TXN\_READ\_COMMITTED > SQL\_TXN\_REPEATABLE\_READ > SQL\_TXN\_SERIALIZABL > **SQL\_ATTR\_AUTOCOMMIT SQLUINTEGER,表示是否可自动提交** > SQL\_AUTOCOMMIT\_ON default > SQL\_AUTOCOMMIT\_OFF > **SQL\_ATTR\_TXN\_ISOLATION SQLUINTEGER,表示当前连接设置的事务隔离级别** > SQL\_TXN\_READ\_UNCOMMITTED > SQL\_TXN\_READ\_COMMITTED default > SQL\_TXN\_REPEATABLE\_READ > SQL\_TXN\_SERIALIZABL 其中,SQL\_TXN\_CAPABLE、SQL\_TXN\_ISOLATION\_OPTION、SQL\_DEFAULT\_TXN\_ISOLATION只可以读取,不可写入的属性。SQL\_ATTR\_AUTOCOMMIT、SQL\_ATTR\_TXN\_ISOLATION是可读可写属性。 ### 二、如何读取和设置这些属性? ### 读取这些属性: SQLRETURN retCode; SQLUSMALLINT txnCapable; retCode = SQLGetInfo(hdbc, SQL_TXN_CAPABLE, (SQLPOINTER)&txnCapable, sizeof(txnCapable), NULL); SQLUINTEGER txnIsolationOption; retCode = SQLGetInfo(hdbc, SQL_TXN_ISOLATION_OPTION, (SQLPOINTER)&txnIsolationOption, sizeof(txnIsolationOption), NULL); SQLUINTEGER defaultTxnIsolation; retCode = SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION, (SQLPOINTER)&defaultTxnIsolation, sizeof(defaultTxnIsolation), NULL); SQLUINTEGER autoCommit; retCode = SQLGetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)&autoCommit, sizeof(autoCommit), NULL); SQLUINTEGER txnIsolation; retCode = SQLGetConnectAttr(hdbc, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)&txnIsolation, sizeof(txnIsolation), NULL); 设置SQL\_ATTR\_AUTOCOMMIT、SQL\_ATTR\_TXN\_ISOLATION: SQLRETURN retCode; retCode = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)autoCommit, 0); retCode = SQLSetConnectAttr(hdbc, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)txnIsolationLevel, 0); ### 三、设置为手动提交后,如何提交事务? ### 提交时使用: SQLRETURN SQLEndTran( SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT CompletionType); HandleType:可以为SQL\_HANDLE\_ENV 或 SQL\_HANDLE\_DBC Handle:表示SQL\_HANDLE\_ENV 或 SQL\_HANDLE\_DBC类型句柄的值 CompletionType:SQL\_COMMIT 或 SQL\_ROLLBACK **参考** [SQLGetInfo 函数][SQLGetInfo] [SQLSetConnectAttr 函数][SQLSetConnectAttr] [SQLGetConnectAttr 函数][SQLGetConnectAttr] [SQLEndTran 函数][SQLEndTran] [SQLGetInfo]: https://docs.microsoft.com/zh-cn/sql/odbc/reference/syntax/sqlgetinfo-function?view=sql-server-2017 [SQLSetConnectAttr]: https://docs.microsoft.com/zh-cn/sql/odbc/reference/syntax/sqlsetconnectattr-function?view=sql-server-2017 [SQLGetConnectAttr]: https://docs.microsoft.com/zh-cn/sql/odbc/reference/syntax/sqlgetconnectattr-function?view=sql-server-2017 [SQLEndTran]: https://docs.microsoft.com/zh-cn/sql/odbc/reference/syntax/sqlendtran-function?view=sql-server-2017
还没有评论,来说两句吧...