Как вы используете NOLOCK с TADOQuery и TADOTable? - PullRequest
1 голос
/ 01 октября 2010

У меня есть текст SQL "SELECT * FROM TABLE1 WITH (NOLOCK)".

Два вопроса:

  1. Как заставить мой TADOQuery использовать подсказку NOLOCK без необходимости включать это в текст SQL? У меня есть буквально тысячи TADOQuery с их динамически построенным SQL, и было бы трудно добавить WITH (NOLOCK) ко всем из них, не говоря уже о том, что я использую с платформами баз данных, отличными от MSSQL. Есть ли свойство TADOQuery?

  2. Как мне добиться того же с помощью TADOTable? У TADOTable нет SQL, так как мне сказать, чтобы он использовал подсказку NOLOCK?

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 октября 2010

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

ИМХО, вы вообще не должны использовать компоненты TADOTable - в любом случаеAFAIK, у вас нет возможности указать подсказку для сгенерированного запроса - который в любом случае является слишком общим.

Также вы должны быть ОЧЕНЬ осторожными, чтобы использовать NOLOCK.Это означает ЧИТАТЬ БЕЗ КОММИТЕТЫ, иначе грязное чтение .Вы обходите защиту транзакций, и если у вас нет веских причин для ее обхода, вы не должны этого делать - выигрыш в производительности может не стоить потери целостности и согласованности данных.

1 голос
/ 02 октября 2010

если вы используете MS SQL, запустите приведенный ниже оператор один раз при подключении

УСТАНОВИТЕ УРОВЕНЬ ИЗОЛЯЦИИ СДЕЛКИ СЧИТАЕТСЯ НЕЗАКОННЫМ

Cheer AP

...