Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование транзакций в коде программы  [new]
vantano
Member

Откуда:
Сообщений: 29
Господа,

у меня вопрос следующего характера:
программа, которую я пишу предназначена для инвентаризации товара. Работает следующим образом: около 160 человек (магазинов) могут одновременно писать в таблицу имеющийся у них товар. Работают они из локальной сети и их программы напрямую обращаются к MS SQL Server

Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Я использую транзакции в коде программы (С#). И меня смущает, что если программу в неподходящий момент вырубить (во время открытой транзакции), то таблица окажется залоченной.

Почему я использую транзакции: старые товары должны быть удалены из таблицы перед тем, как новые запишутся. Если при записи возникает ошибка, то удаление откатывается вместе с текущей транзакцией.

Не подскажите ли более безопасное решение, чтобы избежать обоих ситуаций - лок таблицы и удаление старых товаров, без записи новых.
15 май 09, 15:23    [7185960]     Ответить | Цитировать Сообщить модератору
 Re: Использование транзакций в коде программы  [new]
vantano
Member

Откуда:
Сообщений: 29
Я немного конкретизирую вопрос:
если поставить таймаут на соединение, то будет ли откачена незаконченная транзакция при обрыве соединения (истечении таймаута)?
Или каким еще образом можно поставить контроль того, что таблица залоченна ненормально долгое время и при этом снять лок с таблицы?
16 май 09, 16:16    [7188425]     Ответить | Цитировать Сообщить модератору
 Re: Использование транзакций в коде программы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
vantano
Я немного конкретизирую вопрос:
если поставить таймаут на соединение, то будет ли откачена незаконченная транзакция при обрыве соединения (истечении таймаута)?
Или каким еще образом можно поставить контроль того, что таблица залоченна ненормально долгое время и при этом снять лок с таблицы?

Таймауты отслеживает клиентское приложение. А что бы не было то, что вы описываете, не открывайте транзакции с клиентского приложения, а используйте хранимые процедуры.
16 май 09, 16:28    [7188443]     Ответить | Цитировать Сообщить модератору
 Re: Использование транзакций в коде программы  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Гавриленко Сергей Алексеевич
vantano
Я немного конкретизирую вопрос:
если поставить таймаут на соединение, то будет ли откачена незаконченная транзакция при обрыве соединения (истечении таймаута)?
Или каким еще образом можно поставить контроль того, что таблица залоченна ненормально долгое время и при этом снять лок с таблицы?

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

... И в этих хранимых процедурах используйте транзакции.
16 май 09, 17:05    [7188489]     Ответить | Цитировать Сообщить модератору
 Re: Использование транзакций в коде программы  [new]
vantano
Member

Откуда:
Сообщений: 29
Спасибо за ответы, пожалуй в этом есть смысл. Я передавал раньше в хранимые процедуры целую таблицу данных в xml формате и потому трудно было отследить ошибки в каждой отдельной строке еще до начала транзакции (чтобы избежать блокировок).
Наверное буду пересылать данные построчно и транзакции опущу назад в хранимые процедуры.
26 май 09, 16:43    [7230137]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить