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
| Возможные причины:
| |
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=MANAGER8;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); } }