MultipleActiveResultSets = Справжні чи кілька з'єднань?


85

У мене є C #, в якому я створюю зчитувач на з'єднанні ( ExecuteReader), а потім для кожного рядка в цьому зчитувачі виконую іншу команду (with ExecuteNonQuery). У цьому випадку краще, щоб я використовував MultipleActiveResultSets=Trueдля свого з’єднання або використовував кілька з’єднань?

Відповіді:


98

Для цього типу операцій було додано декілька наборів активних результатів (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.