В моей работе есть финансовое приложение, написанное на VB.NET с SQL, над которым могут работать несколько пользователей одновременно.
В какой-то момент один пользователь может решить опубликовать пакет записей, над которым он (и, возможно, другие люди) в настоящее время работают.
Очевидно, я больше не хочу, чтобы другие пользователи использовали записи Добавить, редактировать или Удалить в этом пакете после, когда был инициирован Почтовый процесс.
Я уже видел, что могу заблокировать данные все, открыв транзакцию SQL в момент запуска процесса Post, но этот процесс может быть довольно длительным, и я бы предпочел не открывать транзакцию в течение нескольких минут, которые могут потребоваться для выполнения функции. .
Есть ли способ заблокировать только те записи, которые, как я знаю, нужно обрабатывать из кода VB.NET?


Добавить
with (rowlock)
к вашему SQL-запросу
Статья о производительности SQL Server
Обновлено: ок, неправильно понял вопрос. Вам нужна изоляция транзакции. +1 Джоэлю :)
Если вы используете Oracle, вы должны использовать Выберите для обновления для строк, которые вы блокируете.
вот пример
SELECT address1 , city, country
FROM location
FOR UPDATE;
Вероятно, вы захотите установить уровень изоляции для всей транзакции, а не использовать с (уключиной) для определенных таблиц.
Посмотрите на эту страницу:
http://msdn.microsoft.com/en-us/library/ms173763.aspx
В частности, поищите в нем «блокировку строк», и я думаю, вы обнаружите, что READ COMMITTED или REPEATABLE READ - это то, что вам нужно. READ COMMITTED - это значение по умолчанию для SQL Server. Если READ COMMITTED кажется вам недостаточно сильным, перейдите к REPEATABLE READ.
Обновлять: После прочтения одной из ваших последующих публикаций вы определенно захотите повторения чтения. Это будет держать блокировку до тех пор, пока вы не зафиксируете или не откатите транзакцию.
оберните его в tran, используйте holdlock + updlock в выборе
пример
begin tran
select * from
SomeTable (holdlock,updlock)
where ....
processing here
commit