Как можно использовать транзакции вручную или с обратной транзакцией с использованием API ODBC Microsoft Windows? Запрошенный SQL-сервер - это MS SQL Server, если это имеет значение. Язык - это C++.Как выполнять ручные транзакции с Windows ODBC
Мне нужно включить несколько звонков в SQLExecDirect
в одну транзакцию, чтобы гарантировать согласованность. Выполненные запросы не используют транзакции.
псевдокод:
// Begin Transaction?
SQLExecDirect(...);
SQLExecDirect(...);
SQLExecDirect(...);
SQLExecDirect(...);
SQLExecDirect(...);
SQLEndTran(...);
Мой подход был отключить AutoCommit первым как описано на TechNet:
SQLSetConnectAttr(m_hConnection, SQL_ATTR_AUTOCOMMIT, (void*) SQL_AUTOCOMMIT_OFF, 0);
Выполнить мои запросы, а затем совершить/откат после:
SQLEndTran(SQL_HANDLE_DBC, m_hConnection, SQL_COMMIT);
It не дает никаких ошибок, но, похоже, не делает этого. Если я проверю журнал транзакций с помощью MS SQL Management Studio, все будет отображаться как implicit_transaction
(Okay), охватывая только одну операцию (Not Okay).
Может ли эта проблема быть вызвана каждым вызовом SQLExecDirect
, используя его собственное заявление обращаться? Я думал об этом, и я мог бы попытаться изменить это, но это была бы довольно сложная задача, которую я не желаю делать только потому, что это может быть.
С другой стороны, я понятия не имею, как отлаживать дальше. Если бы у кого-то были какие-то идеи, я бы очень признателен.
Я пропустил проверку возвращаемого значения в своем сообщении, конечно, я делаю это. Нет ошибки. Это SQL_SUCCESS. Попробуй попробовать другое дело, спасибо. SQL_IS_UINTEGER может быть ключом, поскольку его значение равно -5 не 0. – antipattern
Так оно и было. Благодаря! – antipattern