MultipleActiveResultSets = True или несколько подключений?


86

У меня есть C #, в котором я создаю средство чтения для соединения ( ExecuteReader), а затем для каждой строки в этом средстве чтения выполняю другую команду (с помощью ExecuteNonQuery). В этом случае лучше использовать MultipleActiveResultSets=Trueодно соединение или несколько соединений?

Ответы:


99

Множественные наборы активных результатов (MARS) были добавлены специально для этого типа операций, поэтому вам не нужно открывать два соединения одновременно, чтобы иметь возможность читать из SqlDataReader И выполнять дополнительные пакеты.

MARS совместим с SQL Server 2005 и выше. Цитата из документов MSDN:

До введения нескольких активных наборов результатов (MARS) разработчикам приходилось использовать либо несколько соединений, либо курсоры на стороне сервера для решения определенных сценариев.

Для получения дополнительной информации см .:

Библиотека MSDN - Обзор MARS

Рабочий пример чтения и обновления данных:

Библиотека MSDN - управление данными (MARS), прокрутите вниз до «Чтение и обновление данных с помощью MARS».


21

Это, насколько я знаю, причина, по которой был добавлен MARS, так что да, я думаю, вам стоит его использовать.


0

Лучший способ проверить это - запустить SQLServer Profiler и посмотреть, что на самом деле происходит на стороне сервера.

Думаю, лучше не будет, раз уж вы используете ExecuteNonQuery (). Фактически, вы не работаете с несколькими результатами.


6
Это то, о чем я думал, когда писал код, но если у меня нет MultipleActiveResultSets = True, я все равно получаю сообщение «Уже существует открытый DataReader, связанный с этой командой, который должен быть сначала закрыт». исключение ExecuteNonQuery.
Sprintstar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.