У меня возникает ситуация с прерывистым тупиком со следующим (упрощенным) кодом.ADO.NET DeadLock
DataSet my_dataset = new DataSet()
SqlCommand sql_command = new SqlCommand();
sql_command.Connection = <valid connection>
sql_command.CommandType = CommandType.Text;
sql_command.CommandText = 'SELECT * FROM MyView ORDER BY 1'
SqlDataAdapter data_adapter = new SqlDataAdapter(sql_command);
sql_command.Connection.Open();
data_adapter.Fill(my_dataset);
sql_command.Connection.Close();
Ошибки я получаю:
транзакций (Process ID 269) была тупикового на ресурсах блокировки с другим процессом и была выбраны в качестве тупиковой жертвы. Повторите транзакцию .
Как я понимаю, просто заполнение DataSet с помощью команды ADO.Net .Fill() не должно создавать блокировку в базе данных. И, как видно из сообщения об ошибке, блокировка принадлежит другому процессу. В представлении «Просмотр» я имею запросы только для выбора, но он объединяет несколько таблиц.
- Может ли вид, на который распространяется действие выбора, зависит от заблокированных записей?
- Может ли ADO.Net .Fill() заблокировать записи?
- Предполагая, что мне нужно заполнить DataSet, есть ли способ сделать это, чтобы избежать возможных блокировок данных?
SQL Server 2005 (9.0.4035)
Не могли бы вы расширить информацию об этом дальше? Меня бы очень интересовали любые пояснительные документы или ссылки о том, как и почему это поведение происходит. – 0xCAFEBABE
@TME. Я добавил дополнительную информацию. – YWE
ADO «Classic» имеет разные уровни блокировки ... Мне сейчас интересно, каков уровень блокировки по умолчанию для ADO.NET? Является ли метод выше, как я буду «настраивать» само соединение? У меня все еще есть блокировка чтения, если я установил IsolationLevel в Snapshot или ReadUncommited? –