Нет. Приложение должно сделать то, что автор прописал. Сказали закрыть
соединение - значит закрыть и не выпендриваться.

    А подумать ?

Я подумал, прежде чем написал - см. ниже.

   Я тоже подумал. Причём года 3-4 назад :)

> В спецификации OLEDB тоже говорят - надо ругаться ...

Зря.

    Не зря. Если приложение корректно написано, то оно не оставит открытых 
тр-ций
за собой. Ибо сервер понятия не имеет, что с ними делать (кроме случая обрыва
коннекта, который есть форс-мажор).

А чем для сервера должна отличаться "висящая" открытой транзакция
из-за обрыва соединения и в этом случае?

   Тем, что ругается он при детаче. А значит и приложение и коннект живы.

Да, я согласен, что это НЕПРАВИЛЬНАЯ логика работы приложения -
наплодить транзакций, а потом закрыть коннект и сделать вид, что оно
тут ни при чем. Но все равно ведь никто не мешает авторам приложений
просто втупую завершать выполнения программы (читай - не проверять
статус detach() функции).

   Одно дело - забытая тр-ция из-за неизвестной ошибки в приложении, другое -
злонамеренное игнорирование сообщения сервера

Что тогда сервер должен делать с коннектами?
солить? Я считаю, что он с ними должен поступать так же, как и в
случае обрыва - т.е. откатить.

   Так ты в жизни не найдёшь ошибку в приложении, а сервер будет виноват
в "пропавших" данных

З.Ы. Я вот тут еще подумал - а почему сервер должен думать за
программера? Если он ССЗБ - то и пусть.

   См выше

--
Хорсун Влад

Ответить