У меня есть приложение, которое должно использовать роль приложения из базы данных.
Я пытаюсь заставить эту работу работать с запросами, которые на самом деле выполняются с использованием Subsonic (2).
Для этого я создал свой собственный DataProvider, который наследуется от SqlDataProvider от Subsonic.
Он переопределяет функцию CreateConnection и вызывает sp_appsetrole, чтобы установить роль приложения после создания соединения.
Эта часть работает нормально, и я могу получать данные, используя роль приложения.
Проблема возникает, когда я пытаюсь сбросить роль приложения. Я не смог найти места в коде, где мой поставщик вызывается после выполнения запроса, поэтому я попытался добавить свое собственное, изменив код SubSonic. Проблема в том, что Subsonic использует считыватель данных. Он загружает данные из считывателя данных, а затем закрывает их.
- Если я отменяю роль приложения до , устройство чтения данных закрывается, я получаю сообщение об ошибке: Уже существует открытый DataReader, связанный с этой командой, который должен быть закрыт первым.
- Если я отменяю роль приложения после , устройство чтения данных закрывается, я получаю сообщение об ошибке ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто.
Кажется, я не могу найти способ закрыть считыватель данных, не закрыв соединение.