Поддержка транзакций в ADODB для устаревшего приложения VB6 - PullRequest
2 голосов
/ 09 января 2012

Мы находимся в процессе миграции унаследованного приложения VB6 с бэкэнда Sybase на SQL Server 2008 R2. Большинство приложений делают переход хорошо, но у меня есть одно приложение, которое использует строгий контроль транзакций из кода с использованием именованных транзакций. На основании тщательного тестирования выясняется, что клиент или сервер вообще не поддерживают команды «begin», «commit» и «rollback».

Выполнение такой команды:

conSQL.Execute "begin tran CaptureSch" ', , adExecuteNoRecords

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

Используя эту команду:

conSQL.BeginTrans

, по-видимому, приводит к некоторому изменению поведения, однако @@ trancount по-прежнему равен нулю, и этот метод не будет поддерживать вложенные транзакции, чего требует код.

Я пытался изменить неявные режимы транзакций, различные параметры строки подключения и многое другое, но безрезультатно. Кто-нибудь есть какие-либо предложения о том, как заставить этот тип функциональности работать? Примеры этого типа функциональности, которые я нахожу в Интернете, показывают, что вложенные именованные транзакции поддерживаются, если они явно выполняются в коде.

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 10 января 2012

На всякий случай, если вы еще этого не обнаружили:

ИНФОРМАЦИЯ: Понимание транзакций ADO с MS SQL Server

Однако ожидаемое поведение в статье непохоже, не соответствует тому, что вы сообщаете здесь.

Также обратите внимание, что метод ADO Connection BeginTrans действительно поддерживает вложенные транзакции, как подтверждено в этой статье MSDN .Поддерживает ли используемый вами поставщик OLE DB также вложенные транзакции - это другой вопрос.

0 голосов
/ 10 января 2012

Что ж, после нескольких тестов выясняется, что если вы используете (по крайней мере один тип) выборки курсора в VB, то, по-видимому, выбрасывает все состояния, связанные с транзакцией:

 rec.Open test_query, cn, adOpenStatic, adLockReadOnly

Таким образом, в этом случае, удалив adOpenStatic CursorType в этом операторе, управление транзакцией (begin tran, commit tran и т. Д.) Снова начинает работать. Я смотрю, какие у меня есть альтернативы для навигации по возвратному набору записей, но я могу повторить эту ошибку / проблему в тестовом приложении.

Я также опубликовал это здесь: http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/4933d0b0-d4a1-4692-851a-ef7a8be7b966

...