Это нечто более любопытное, чем реальная цель. Если вы открыли SqlConnection
и приложили к нему SqlDataReader
, а затем попробуйте запустить другой запрос с использованием того же SqlConnection
, то он выкинет ошибку. Мой вопрос в том, как SqlConnection
знает, что к нему привязан читатель. Для HasDataReader
нет общедоступной собственности или чего-то еще, так как класс SqlConnection
знает?
Оригинальный вопрос: (что уже не актуально)
Привет, я создаю небольшую вещь для пула соединений и более распространенных ошибок, которые мы имеем (это всегда легкое исправление, но мы просто не можем вспомнить reader.Close()
!), когда мы имеют соединение, которое используется множеством классов/методов, и один метод открывает считыватель данных и забывает закрыть его. Это не так уж плохо, потому что много раз все, что вам нужно сделать, - это пойти в отладчик и подняться на один уровень и увидеть функцию до того, как это произошло, и проверить, есть ли у него незакрытый считыватель данных.
Теперь, вот большая проблема. В этом соединении пул, если datareader открыт, тогда он не известен, пока поток не получит соединение и не попытается его использовать, и вещь, которая первоначально открыла устройство чтения данных, может уже не быть живым.
Так просто, как вы можете обнаружить, открыт ли считыватель данных в соединении, и есть ли способ закрыть читатель, не закрывая соединение?