powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вложенные транзакции с клиента в SQL 2005 SP2
9 сообщений из 9, страница 1 из 1
Вложенные транзакции с клиента в SQL 2005 SP2
    #34764023
Лучинкин Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа написана на VFP 9 SP1 с использованием ADO, провайдер используется SQLOLEDB (впрочем проблема сохраняется и с SQL Native Client), сервер SQL 2005 SP2.
На клиенте выдается несколько последовательных команд 'begin tran' через метод Execute объекта Connection, считываю с сервера с помощью хранимой процедуры @@trancount, значение правильное, но если повторно считываю в следующей строке кода то @@trancount уже 0. То есть все транзакции закрыты, хотя команд rollback не было, а команда commit была только одна.
Под SQL 2000 все работало прекрасно. Сравниваю трассы из профайлера для 2005 и 2000, полностью совпадают. То ли мистика, то ли трасса записывает не все события.

Если трассу выполняю в Management Studio то все работает как положено.

Что бы еще посмотреть, проверить?
Может кто-нибудь сталкивался при переходе с 2000 на 2005?
Искал ответ в конференции по SQL Server, попалась ссылка на то, что так делать можно
http://support.microsoft.com/default.aspx?scid=kb;en-us;238163.

А почему не работает с 2005?
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34764054
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучинкин Юрий...На клиенте выдается несколько последовательных команд 'begin tran' ...Может мой совет и не подойдет Вам, но мы сразу отказались от такого подхода и перешли на Хранимые процедуры. Как Вы сами пишите - в этом случае проблем нет

Good luck!
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34764268
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно SET какой для соединения в 2005 значение по умолчанию сменил.

Полностью согласен с Sergey Ch. Так делать нехорошо. Где-нибудь внутри транзакции у пользователя прога подвиснет (MessageBox() случайно где-нибудь в коде окажется например), и все будут ждать пока транзакция не закончится, а виновник по закону подлости уйдет покурить или еще куда. Транзакции лучше обернуть в XП. Если не охота делать постоянные ХП - можно программно генерить временные перед вызовом.
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34764631
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В принципе, можно транзакцию растянуть на несколько пакетов, но главное, интерфейс с пользователем не должен быть вовлечен в транзакцию и при каждой SQLEXEC надо не забывать проверять на ошибку, а при ее наличии, посылать на сервер пакет вида: IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION, но лучше от этой практике отказаться. (как вам и советовал Sergey Ch)
2. Проверьте, не установлена ли у вас на уровне сессии (или в одном из пакетов) опция SET XACT_ABORT ON. Тогда при любой ошибки будет откат транзакции. Может у вас где-то в одном из пакетов получается ошибка и по SET XACT_ABORT ON откатывается вся транзакция.

С уважением, Алексей
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34764643
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34764770
Лучинкин Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K1. В принципе, можно транзакцию растянуть на несколько пакетов, но главное, интерфейс с пользователем не должен быть вовлечен в транзакцию и при каждой SQLEXEC надо не забывать проверять на ошибку, а при ее наличии, посылать на сервер пакет вида: IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION, но лучше от этой практике отказаться. (как вам и советовал Sergey Ch)
2. Проверьте, не установлена ли у вас на уровне сессии (или в одном из пакетов) опция SET XACT_ABORT ON. Тогда при любой ошибки будет откат транзакции. Может у вас где-то в одном из пакетов получается ошибка и по SET XACT_ABORT ON откатывается вся транзакция.

С уважением, Алексей

Сейчас склоняюсь к варианту 2. Только похоже ошибка не моя, а то ли ADO, то ли Fox'a.
При втором запуске хранимой процедуры метод Execute объекта Command генерит следующий код
SET FMTONLY ON EXEC SET FMTONLY OFF
который при повторе в Managed Studio вызывает ошибку, именно после этой строки номер транзакции в профайлере становится нулевым

на SQL 2000 генерится
SET FMTONLY ON EXEC spGetTranCount 0 SET FMTONLY OFF
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34765235
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Установка SET FMTONLY ON просто заменяет вывод данных запроса на вывод пустого набора данных. Может это генерит сам ADO для определения кол-ва и типа колонок.
С уважением, Алексей
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34765514
Лучинкин Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KУстановка SET FMTONLY ON просто заменяет вывод данных запроса на вывод пустого набора данных. Может это генерит сам ADO для определения кол-ва и типа колонок.
С уважением, Алексей

Проверил еще раз под 2000-ым там то же генерит неправильно, есть вообще три случая, первый
не генерится ничего кроме вызова самой процедуры, генерится с 'SET FMTONLY' и с указанием EXEC 'процедура', генерится с 'SET FMTONLY ON EXEC SET FMTONLY OFF'. Клиент ведет себя абсолютно одинаково, что под 2000, что под 2005, но под 2000 2-ой вариант прокатывает без последствий, а в 2005 откатывается транзакция, хотя настройки соединения, в том числе xact_abort одинаковы.
...
Рейтинг: 0 / 0
Вложенные транзакции с клиента в SQL 2005 SP2
    #34766493
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А попробуйте через SQL Profiler посмотреть, что реально идет на сервер из вашего клиента.
С уважением, Алексей
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вложенные транзакции с клиента в SQL 2005 SP2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]