Как только блок использования завершается, устройство чтения данных закрывается.
Таким образом, любая попытка чтения данных из устройства чтения приведет к исключению.
Помните, что для чтения данных используется соединение БД. Когда соединение закрывается (после вашего оператора using), это в свою очередь вызывает Dispose для SQLConnection, что делает SqlDataReader ничем / нулем.
Поместите свой код для создания соединения вне оператора using, вот так.
SqlConnection sqlConnection = SqlUtilities.CreateSqlConnection()
using(SqlCommand sqlCommand = sqlConnection.CreateCommand())
{
sqlCommand.CommandText = commandText;
dataReader = sqlCommand.ExecuteReader (CommandBehavior.CloseConnection);
}
conn.Open();
success=true;
Поскольку вы указали:
CommandBehavior.CloseConnection
Когда вы выполняете командный объект в ту минуту, когда вы закрываете свой считыватель данных, соединение с базой данных также будет закрыто.
Вы можете, если хотите, чтобы ваша функция возвращала заголовок данных вместо логического. Это действительно зависит от ваших предпочтений. Но если вы вернете устройство чтения данных, вы можете проверить с помощью методов HasRows
или Read
. Затем вы можете обернуть источник данных в оператор using, например:
using (SqlDataReader myDataReader = GetMyDataReader())
{
//do something with the reader
}
В конце оператора using для myDataReader
.Dispose()
будет вызван автоматически. Поскольку вы набрали .ExecuteReader()
внутри GetMyDataReader()
с CommandBehavior.CloseConnection
, то утилита считывателя также закроет ваше соединение с БД.