Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

ADO и транзакции   Найти похожие ветки 

 
truegosha   (2007-01-24 10:36) [0]

Здравствуйте!
Столкнулся с проблемой. Нужно выполнить множество sql команд в одной транзакции. СУБД MSSQL. Если во время выполнения одной из команд произошла ошибка, то нужно откатить все изменения. Но у меня есть серьезные подозрения, что каждое ADOConnection.Execute() выполняется в своей транзакции... Конструкция ADOConnection.Execute("BEGIN TRANSACTION ... ") никак не влияет на поведение ADOConnection. Прога на D6, все настройки компонентов ADO (кроме строки подключения :)) по умолчанию. Вопрос. Как заставить несколько ADOConnection.Execute() выполняться в одной транзакции. Можно было бы в Execute() передать большой скрипт, выполняющий все что надо, но такое решение вызывает опасения...


 
Ega23 ©   (2007-01-24 10:40) [1]

в Execute() передать большой скрипт

В чём опасения-то?


 
sniknik ©   (2007-01-24 10:46) [2]

> Конструкция ADOConnection.Execute("BEGIN TRANSACTION ... ") никак не влияет на поведение ADOConnection
а как оно должно влиять? sql команда выполняется на sql сервере, а ADOConnection это компонента в программе на клиенте.

> Как заставить несколько ADOConnection.Execute() выполняться в одной транзакции
зачем заставлять? и так все так и работает, после указанной sql команды сервер организует транзакцию и все последующее будет выполняться в ней.


 
truegosha   (2007-01-24 11:19) [3]

> В чём опасения-то?

В Execute() не хочу передавать большой скрипт, так как не будет возможности создать толковый лог выполнения.

> sql команда выполняется на sql сервере, а ADOConnection это компонента в программе на клиенте

Извините, неверно выразился. Мне нужно, чтобы на сервере создалась транзакция и все последующие Execute() выполнялись в ней, пока не выполнится COMMIT TRANSACTION, или пока не произойдет ошибка.

> сервер организует транзакцию и все последующее будет выполняться в ней

Так Вы утверждаете, что для каждого Execute() не создается отдельной транзакции? По-моему все же это не так! При возникновении ошибки откатить то, что выполнилось предыдущими Execute() не получается!


 
alex_*** ©   (2007-01-24 11:44) [4]

DM.Connection.BeginTransaction();

cmd1.Execute();
cmd2.Execute();
.....

DM.Connection.Commit();

?


 
sniknik ©   (2007-01-24 12:29) [5]

> Так Вы утверждаете, что для каждого Execute() не создается отдельной транзакции?
вообщето я утверждал немного не это...
по поводу "каждого Execute()". не execute-а, это тоже метод клиентской компоненты, а любой sql команды их действительно сервер "обертывает" в неявную транзакцию, если она не задана явно. ну и потом, они могут быть вложенные - транзакция верхнего уровня откатит все в нее вложенные, правда тогда она должна быть именованная иначе нет возможности обратится "через голову" другой.

> По-моему все же это не так!
не терзайся сомнениями. проверь. это очень легко сделать. (3 команды, стартовать, выполнить, откатить... и посмотреть откатилось или нет)

> При возникновении ошибки откатить то, что выполнилось предыдущими Execute() не получается!
у тебя ошибка в программе

alex_*** ©   (24.01.07 11:44) [4]
вообщето без разницы, если есть возможность это будет переведено в теже запросы (можеш посмотреть профайлером).
предпочитаю делать запросами. явно.



Страницы: 1 вся ветка

Текущий архив: 2007.04.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.053 c
2-1174975661
Alex_C
2007-03-27 10:07
2007.04.15
Подскажите консольный текстовый редактор


15-1174573539
Чапаев
2007-03-22 17:25
2007.04.15
А почему...


15-1174307753
ocean
2007-03-19 15:35
2007.04.15
Технология UML


15-1174387055
Gragdanin
2007-03-20 13:37
2007.04.15
Минусовки песен


1-1171620919
Kolan
2007-02-16 13:15
2007.04.15
Программа + пакет = AV при инициализации. Наоборот все Ок...