Как определить, активен ли MARS в текущем соединении?

#.net #sql-server #tsql

#.net #sql-сервер #tsql

Вопрос:

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

Либо с помощью команды TSQL, либо с помощью метода собственного клиентского API .NET SQL Server.

Ответ №1:

Вы могли бы проверить свойство ConnectionString ConnectionString на наличие атрибута MultipleActiveResultSets, и если он есть, убедитесь, что для него установлено значение true.

В зависимости от использования вашего кода вы также можете проверить SqlConnection.Свойство ServerVersion для проверки поддержки MARS. Основное число должно быть > = 9. (SQL Server 2005 и выше). Это было бы полезно, если ваш код используется в разных версиях SQL Server.

SqlConnectionStringBuilder также можно использовать в обратном порядке (возможно, странная идея), у него есть свойство MultipleActiveResultSets.

Комментарии:

1. @Программное обеспечение не ручное — вы можете использовать SqlConnectionStringBuilder, который разберет его на пары ключ / значение

2. Вы просто проверяете ключ MultipleActiveResultSets

3. Ок, ок 🙂 Я использую корпоративную библиотеку. Но это может быть решением. Лучше всего было бы иметь логическое свойство где-нибудь у провайдера.

Ответ №2:

Если проверка строки подключения (лучший вариант, IMO) не привлекает … возможно, намеренно подделать что-то, что могло бы потребоваться MARS, например, открыть средство чтения данных в двух строках, прочитать одну из строк и (не закрывая средство чтения) запросить другой запрос на основе чтения.

Обратите внимание, что буферизация может повлиять на это, но стоит попробовать…