Есть ли проблема, когда я вызываю SqlAdapter.Update и в то же время вызываю SqlDataReader.Read

У меня есть два приложения: одно обновляет одну таблицу с постоянным количеством строк (128 строк) с помощью метода SqlDataAdapter.Update, а другое приложение периодически выбирает из этой таблицы с помощью SqlDataReader.

иногда DataReader возвращает только 127 строк, а не 128, и приложение обновления не удаляет и даже не вставляет новые строки, оно просто обновляет.

Я спрашиваю, в чем причина такого поведения?


person Ahmed Said    schedule 23.06.2009    source источник


Ответы (1)


Да, для чтения данных требуется открытое соединение, и он не извлекает все строки во время открытия запроса, поэтому вы извлекаете данные с сервера в режиме реального времени. Это отличается от DataTable, который запрашивает и помещает всю информацию в кэшированный объект (отключенный набор записей).

person kemiller2002    schedule 23.06.2009
comment
Итак, я могу решить проблему, используя SqlDataAdapter.Fill в приложении для чтения вместо использования класса SqlDataReader?? - person Ahmed Said; 23.06.2009
comment
Другая ваша возможность - заблокировать таблицу, просмотреть все записи с помощью средства чтения данных и поместить их в объекты памяти и закрыть соединение, когда закончите. - person kemiller2002; 23.06.2009
comment
Как я могу заблокировать все записи с помощью SqlDataReader, я выполняю простой оператор select sql select * from x - person Ahmed Said; 23.06.2009
comment
Прошло некоторое время с тех пор, как мне приходилось это делать, но вы можете сделать это в коде sql, SELECT * FROM Table WITH (ROWLOCK). Вы должны быть осторожны, потому что это остановит соединения от обновления данных, пока соединение не освободит блокировку. Если у вас есть несколько объектов, подключенных к одной и той же таблице, им, вероятно, придется подождать, пока ридер завершит работу. - person kemiller2002; 23.06.2009
comment
Вы должны быть осторожны, потому что это остановит соединения от обновления данных, пока соединение не освободит блокировку. поэтому соединение снимает блокировку, когда читатель закрывается?? - person Ahmed Said; 23.06.2009