Доступные версии документации

ExecuteReader(CommandBehavior)

Метод выполняет свойство CommandText по соединению Connection и помещает результаты (обычно выборку данных) согласно заданным в аргументе CommandBehavior условиям в объект DbDataReader (работа с объектом DbDataReader описана в подразделе Класс DbDataReader).

Синтаксис
public DbDataReader ExecuteReader(CommandBehavior behavior);

behavior – условие выборки (член перечисления System.Data.CommandBehavior):

Имя члена Описание
Default Запрос может вернуть несколько наборов результатов. Выполнение запроса может повлиять на состояние БД. Default не устанавливает флаги CommandBehavior, поэтому вызов ExecuteReader(CommandBehavior.Default) функционально эквивалентен вызову ExecuteReader().
SingleResult

Запрос возвращает только одну выборку данных.

Примечание

В текущей версии значение SingleResult игнорируется.

SchemaOnly

Запрос возвращает метаданные о столбцах выборки данных. Сам запрос фактически не выполняется.

Примечание

В текущей версии значение SchemaOnly игнорируется.

KeyInfo

Запрос возвращает данные, метаданные и дополнительную информацию о том, какие столбцы имеют атрибут AUTOINC и PRIMARY KEY. Если выборка получена в результате объединения нескольких таблиц, то некоторые значения метаданных могут отсутствовать.

Примечание

В текущей версии значение KeyInfo установлено всегда.

SingleRow

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

Примечание

В текущей версии значение SingleRow игнорируется.

SequentialAccess

Содержит указание для DataReader способа обработки строк, содержащих столбцы с большими двоичными значениями. Вместо загрузки всей строки полностью способ SequentialAccess позволяет DataReader загружать данные как поток. Затем можно использовать метод GetBytes или метод GetChars, чтобы указать положение байта для начала операции чтения и ограниченный размер буфера для возврата данных.

Примечание

В текущей версии значение SequentialAccess игнорируется.

CloseConnection После закрытия объекта DataReader необходимо автоматически закрыть и связанное с ним соединение Connection.

Примечание

Перечисление имеет атрибут FlagsAttribute, поддерживающий побитовое соединение составляющих его значений.

Возвращаемое значение

Результирующая выборка данных в виде объекта System.Data.Common.DbDataReader.

Примечание

Количество записей в выборке данных узнать нельзя.

Исключения
InvalidOperationException

Возможные причины:

  • текст команды не установлен;

  • команда не связана с соединением;

  • соединение не открыто;

  • команда не связана с транзакцией, открытой по соединению;

  • команда связана с открытым объектом DataReader.

Exception Для входного параметра не установлено значение или для параметра длиной больше 4000 байт не установлен тип BLOB.
LinterSqlException Код завершения СУБД ЛИНТЕР не равен 0.
Пример
 // C#
using System;
using System.Data;
using System.Data.Common;

class ExecuteReaderSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "User ID=SYSTEM;Password=MANAGER;Data Source=LOCAL";
    con.Open();
    // Создание объекта DbCommand
    DbCommand cmd = factory.CreateCommand();
    cmd.Connection = con;
    // Формирование текста SQL-запроса
    cmd.CommandText = "select distinct model, make from auto";
    // Выполнение SQL-запроса
    DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    // Обработка результатов запроса
    while (reader.Read())
    {
      Console.WriteLine("Марка автомобиля : " + reader.GetString(0) +
        " Производитель : " + reader.GetString(1));
    }
    // Освобождение ресурсов
    reader.Dispose();
    cmd.Dispose();
    // При создании DbDataReader указан флаг CommandBehavior.CloseConnection,
    // поэтому соединение закрывается автоматически
    Console.WriteLine("Состояние соединения: " + con.State);
  }
}
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter