c # SqlDatareader в моем базовом классе возвращает ошибку нулевого соединения - PullRequest
1 голос
/ 14 ноября 2011

У меня есть базовый класс, который содержит SqlDataReader, который получает данные с помощью хранимой процедуры, это прекрасно работает, пока я не верну устройство чтения данных обратно, говоря, что соединение пустое.

Есть ли у кого-нибудь какие-либоидеи?вот мой код:

public SqlDataReader GetDataReader(string QueryName, SqlParameter[] Params)
{
   SqlConnection conn = new SqlConnection(this.ConnectionString);
   SqlDataReader reader;

   using (conn)
   {
      SqlCommand command = new SqlCommand(QueryName,conn);
      command.CommandType = CommandType.StoredProcedure;

      if(Params !=null)
          command.Parameters.Add(Params);

      conn.Open();

      reader = command.ExecuteReader();                
   }

   // conn.Close();

   return reader;
}

Если вы заметили, я закомментировал закрывающую часть, это я пытался заставить ее работать, по какой-то причине при возврате хранилища данных обратно, он настроен на закрытие???

Спасибо!

Ответы [ 6 ]

2 голосов
/ 14 ноября 2011

Вы хотите сделать следующее:

    SqlDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection)

и не закрывать соединение.Когда вы закрываете хранилище данных, оно закрывается для вас, если вы используете код выше.

2 голосов
/ 14 ноября 2011

при использовании using (conn) он автоматически удаляет conn объект

2 голосов
/ 14 ноября 2011

Вы используете «using», которое выполняет те же действия, что и вызов conn.Close ().

2 голосов
/ 14 ноября 2011

Когда используется блок (conn), он закрывает соединение с базой данных, поэтому вы получаете эту ошибку. Просто удалите эту строку.

2 голосов
/ 14 ноября 2011

Поскольку ваше соединение закрыто и утилизировано с помощью блока до возврата считывателя . Смотрите этот пост

1 голос
/ 14 ноября 2011

DataReader - это связанный объект. Означает, что для получения данных из DataReader, соединение в это время должно быть открыто Это не так, если вы работаете с DataSets, которые работают в автономном режиме. Вы закрываете соединение в своем коде, прежде чем вернуть DataReader. Поэтому DataReader не может предоставить вам никаких данных.

Лучшей альтернативой проекта может быть предоставление соединения извне (внедрение зависимости).

...