Автокоммит и несколько SqlConnections - PullRequest
1 голос
/ 13 апреля 2010

Гарантируется ли, что вставка с автокоммитом будет немедленно видна любому / каждому SqlConnection в базе данных или только в его собственном SqlConnection?

У меня есть процедура с 3 SqlConnections. Соединение 1 связано с SqlDataReader, который управляет циклом. В рамках цикла Соединение Два используется для получения данных для тестирования, а Соединение Три используется для вставки строк в таблицу. Вставка автокоммитов.

У нас есть ситуация, когда тест (с использованием данных Соединения Два) не проходит. Одним из возможных объяснений является то, что Соединение Два иногда не видит строку, вставленную Соединением Три при предыдущем прохождении цикла. Возможно ли это?

Я не вижу проблемы с объединением двух и трех, и я собираюсь это сделать, но у меня нет никакого способа заставить эту ошибку произойти, и я хотел бы знать, если это объяснение даже возможно.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Да, вставки с автоматической фиксацией такие же, как и любые другие вставки с фиксацией, и будут видны при других подключениях.

Однако вставка строк не изменит строки, возвращенные уже существующим SqlDataReader, поскольку объект SqlDataReader инкапсулирует набор записей - результаты запроса - а не запрос сам по себе.

Я не уверен, что делает ваше "Соединение Второе", но если это зависит от результатов INSERT в C3, видимых для SqlDataReader, то по этой причине он определенно потерпит неудачу.

0 голосов
/ 13 апреля 2010

Это то, что вы делаете?

  1. Вы используете открыть SQLDataReader, который будет получать данные, а затем проходить через них.
  2. Во время этого цикла вы вставляете запись, которую затем ожидаете с помощью оператора select, используемого в читателе.
  3. Вы не видите его в цикле, так как данные уже выбраны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...