Закрытие набора записей откатывает транзакцию?

У меня есть система C ++, которая использует код afxdb в MFC для доступа и обновления базы данных SQL Server через соединение ODBC.

В рамках работы над некоторыми проблемами с SQL Server 2016 разработчик нашел эту документацию и поделился ею:
https://msdn.microsoft.com/en-us/library/ecc2bf09.aspx

В частности, этот комментарий: «Если вы закрываете набор записей или связанный с ним объект CDatabase, когда выполняется транзакция (вы не называли CDatabase :: CommitTrans или CDatabase :: Rollback), транзакция будет откатываться автоматически (если только не серверная часть вашей базы данных ядро базы данных Microsoft Jet)

Код открывается и закрывает наборы записей повсюду без автоматического отката. Например, очень распространенный шаблон:

Open Database
Begin Transaction

Open RecordsetA
Update something with RecordsetA
Close RecordsetA

Open RecordsetB
Update something with RecordsetB
Close RecordsetB

If OK then Commit else Rollback

Close Database

И это работает так, как я ожидаю, что это сработает, вся транзакция фиксируется или откатывается при явном подтверждении или откате, а не при закрытии набора записей.

Однако, если я правильно читаю документацию, когда набор записей закрыт, транзакция должна быть откатана.

Это было бы кошмаром для работы в коде, мы должны были бы иметь дело с каждым набором записей и не закрывать их до тех пор, пока транзакция не будет обработана. Каждая подпрограмма, которую мы вызываем, должна была бы передать наборы записей, которые она открыла, обратно вызывающей стороне для закрытия после обработки транзакции.

Так правильна ли документация, а Microsoft просто не реализовала ее?

Есть ли что-то, что я пропускаю, и есть способ переопределить это, что где-то в нашем старом коде разработчик однажды установил?

Документация не распространяется на нас?

Или документация неверна?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]