Пространства имен ADO .NET. Обзор. Интерфейсы ADO .NET
Поиск на других ресурсах:
Содержание
- 1. Пространство имен System.Data. Общие сведения
- 2. Интерфейсы ADO .NET
- 2.1. Интерфейс IDbConnection. Объект подключения
- 2.2. Интерфейс IDbTransaction. Работа с транзакциями
- 2.3. Интерфейс IDbCommand. Задавание SQL-команды
- 2.4. Интерфейсы IDbDataAdapter, IDataAdapter. Адаптер данных между набором данных и базой данных
- 2.5. Интерфейсы IDataReader и IDataRecord. Чтение строк из таблицы базы данных
- 2.6. Интерфейсы IDbDataParameter и IDataParameter. Параметр в запросе
- Связанные темы
1. Пространство имен System.Data. Общие сведения
Пространство имен System.Data является базовым пространством, сочетающим в себе другие пространства имен, использующие технологию ADO .NET для доступа к базам данных. Невозможно создать приложение, использующее ADO .NET без использования этого пространства имен.
В этом пространстве имен объявлены общие классы (типы), используемые всеми поставщиками ADO .NET независимо от используемого ими источника данных. В список средств System.Data входят:
- типы (классы), представляющие разные примитивы баз данных к которым можно отнести таблицы, столбцы, строки, ограничения и т.п.;
- общие интерфейсы, реализуемые объектами поставщиков данных;
- исключения, которые специфичны для баз данных (NoNullAllowedException, RowNotInTableException, MissingPrimaryKeyException).
В нижеследующем перечне представлены основные типы (составляющие) пространства имен System.Data:
- класс Constraint – реализует ограничения, которые могут накладываться на один или несколько объектов типа DataColumn;
- класс DataColumn – представляет один столбец в таблице базы данных;
- класс DataRelation – представляет связь между таблицами типа DataTable;
- класс DataRow – одна строка (запись) в объекте типа DataTable;
- класс DataSet – представляет кэш данных в памяти, состоящий из произвольного количества взаимосвязанных объектов DataTable;
- класс DataTable – блок данных в виде таблицы;
- класс DataTableReader – реализует доступ к данным таблицы DataTable в режиме «только для чтения» и в прямом направлении (от начала до конца);
- класс DataView – обеспечивает пользовательское представление, привязанное к данным (databindable customized view) для выполнения операций сортировки, фильтрации, поиска, редактирования и навигации. Этот класс не сохраняет данные, а только содержит связь с данными объекта DataTable. Операции, вносящие изменения в DataView, будут влиять на данные в DataTable. И, наоборот, изменения в данных объекта DataTable будут влиять на все представления типа DataView, отображающие эти данные;
- интерфейс IDataAdapter – определяет основное поведение объекта адаптера данных (DataAdapter);
- интерфейс IDataParameter – определяет основное поведение объекта параметра (DbParameter);
- интерфейс IDataReader – определяет поведение объекта чтения данных (DbDataReader);
- интерфейс IDbCommand – определяет поведение объекта, реализующего команды на языке SQL (DbCommand);
- интерфейс IDbConnection – определяет поведение объекта, осуществляющего подключение к хранилищу данных (DbConnection);
- интерфейс IDbDataAdapter – расширяет IDataAdapter для получения дополнительных возможностей объекта адаптера данных (DbDataAdapter);
- интерфейс IDbTransaction – определяет поведение объектов, реализующих транзакцию.
⇑
2. Интерфейсы ADO .NET
2.1. Интерфейс IDbConnection. Объект подключения
Интерфейс IDbConnection содержит набор элементов, которые используются:
- для настройки подключения к конкретному поставщику данных (DbConnection, SqlConnection, OledbConnection, OdbcConnection);
- для получения объекта, выполняющего транзакцию. Такой объект может быть одним из типов: DbTransaction, SqlTransaction, OledbTransaction, OdbcTransaction.
Приблизительная реализация интерфейса следующая:
public interface IDbConnection : IDisposable { string ConnectionString { get; set; } int ConnectionTimeout { get; } string Database { get; } ConnectionState State { get; } IDbTransaction BeginTransaction(); void ChangeDatabase(string databaseName); void Close(); IDbCommand CreateCommand(); void Open(); }
Составляющие элементы интерфейса имеют следующее назначение:
- ConnectionString – строка подключения с базой данных;
- ConnectionTimeot – время в секундах, в течение которого объект типа DbConnection (или производного типа) пытается установить соединение с источником данных;
- Database – имя базы данных;
- State – описывает текущее состояние соединения с источником данных;
- BeginTransaction() – начинает выполнять транзакцию в базе данных;
- ChangeDatabase() – изменяет базу данных для открытого соединения с текущим поставщиком данных (SqlConnection, OledbConnection и т.д.);
- Close() – закрывает соединение с базой данных, которая была предварительно открыта методом Open(). Сочетание этих методов реализуется в режиме подключения к базе данных (так называемый подключенный уровень);
- CreateCommand() – создает команду на языке SQL для текущего соединения;
- Open() – открывает соединение для доступа к базе данных в подключенном режиме (подключенный уровень).
⇑
2.2. Интерфейс IDbTransaction. Работа с транзакциями
В интерфейсе IDbTransaction определены составляющие, позволяющие программным путем взаимодействовать с сеансом транзакций и соответствующим хранилищем данных. Транзакция создается с помощью метода BeginTransaction(), который описан в интерфейсе IDbConnection.
Интерфейс IDbTransaction имеет следующее объявление:
public interface IDbTransaction : IDisposable { IDbConnection Connection { get; } IsolationLevel IsolationLevel { get; } void Commit(); void Rollback(); }
Элементы интерфейса имеют следующее назначение:
- интерфейс Connection – ссылка на текущее соединение с хранилищем данных;
- перечисление IsolationLevel – определяет транзакцию, блокирующую поведение для соединения;
- Commit() – метод, фиксирующий транзакцию в базе данных;
- Rollback() – метод, осуществляющий откат транзакции.
⇑
2.3. Интерфейс IDbCommand. Задавание SQL-команды
Интерфейс IDbCommand реализуется классами, объекты которых позволяют программно работать с операторами на языке SQL, хранимыми процедурами и параметризированными запросами. Также объекты этих классов поддерживают доступ к типу чтения данных провайдера с помощью метода ExecuteReader().
Спецификация интерфейса IDbCommand следующая:
public interface IDbCommand : IDisposable { string CommandText { get; set; } int CommandTimeout { get; set; } CommandType CommandType { get; set; } IDbConnection Connection { get; set; } IDataParameterCollection Parameters { get; } IDbTransaction Transaction { get; set; } UpdateRowSource UpdatedRowSource { get; set; } void Cancel(); IDbDataParameter CreateParameter(); int ExecuteNonQuery(); IDataReader ExecuteReader(); object ExecuteScalar(); void Prepare(); }
Ниже приведено назначение элементов интерфейса IDbCommand:
- свойство CommandText – текст команды на языке Transact-SQL (T-SQL), имя таблицы или сохраняемой процедуры, которые нужно выполнить над источником данных;
- свойство CommandTimeout – временной интервал ожидания перед завершением попытки выполнить команду и сгенерировать ошибку;
- перечисление CommandType – определяет как командная строка CommandText будет интерпретироваться (SQL-текст, сохраняемая процедура и т.п.);
- свойство Connection – объект типа DbConnection, определяющий подключение для которого данный объект DbCommand выполняется;
- свойство Parameters – коллекция параметров (если есть), получаемая командой на языке SQL;
- свойство Transaction – объект транзации, выполняемой текущим объектом типа DbCommand;
- свойство UpdatedRowSource – определяет, как результат SQL-команды применяется к объекту типа DataRow в случае выполнения команды UPDATE в объекте DbDataAdapter;
- метод Cancel() – пытается отменить выполнение команды, сформированной в объекте типа DbCommand;
- метод CreateParameter() – создает новый экземпляр типа DbParameter (SqlParameter, OledbParameter, OdbcParameter);
- метод ExecuteNonQuery() – выполняет команду на языке Transact-SQL для заданного соединения. Метод возвращает количество строк, на которые было оказано влияние;
- метод ExecuteReader() – отправляет текст, описанный в DbCommand.CommandText, в объект DbCommand.Connection и строит коллекцию (набор) записей типа DbDataReader. При построении коллекции DbDataReader учитывается значение перечисления CommandBehavior;
- метод ExecuteScalar() – выполняет запрос и возвращает первую колонку первой строки в результирующем наборе запроса. При этом дополнительные столбцы или строки игнорируются;
- метод Prepare() – создает подготовленную версию команды на экземпляре SQL Server.
⇑
2.4. Интерфейсы IDbDataAdapter, IDataAdapter. Адаптер данных между набором данных и базой данных
Адаптеры данных (data adapter) предназначены для проведения операций чтения/записи между наборами типа DataSet и конкретным хранилищем данных (базой данных). Адаптеры данных описываются в интерфейсах IDbDataAdapter и IDataAdapter.
Интерфейс IDbDataAdapter описывает команды считывания, вставки, редактирования и удаления данных из таблицы на основе операторов SQL. Объявление интерфейса следующее
public interface IDbDataAdapter : IDataAdapter { IDbCommand DeleteCommand { get; set; } IDbCommand InsertCommand { get; set; } IDbCommand SelectCommand { get; set; } IDbCommand UpdateCommand { get; set; } }
В этом интерфейсе элементы имеют следующие назначения:
- свойство DeleteCommand – описывает команду DELETE на языке SQL;
- свойство InsertCommand – инкапсулирует SQL-команду INSERT;
- свойство SelectCommand – инкапсулирует команду выборки данных из хранилища (SELECT);
- свойство UpdateCommand – описывает SQL-команду UPDATE.
Поведение IDbDataAdapter определяет интерфейс IDataAdapter. Этот интерфейс объявляет средства, реализующие основную функцию адаптера данных: обеспечение обмена данными между объектами DataSet и хранилищем данных (базой данных). Также этот интерфейс позволяет отобразить имена столбцов из базы данных на более понятные отображаемые имена. Объявление интерфейса следующее
public interface IDataAdapter { MissingMappingAction MissingMappingAction { get; set; } MissingSchemaAction MissingSchemaAction { get; set; } ITableMappingCollection TableMappings { get; } int Fill(System.Data.DataSet dataSet); DataTable FillSchema(DataSet dataSet, SchemaType schemaType); IDataParameter[] GetFillParameters(); int Update(DataSet dataSet); }
Составляющие интерфейса IDataAdapter имеют следующее назначение:
- свойство MissingMappingAction – используется для имен таблиц или имен столбцов. Свойство указывает, нужно ли передавать для фильтрации или обнаруживать ошибки для неотображаемых исходных таблиц или столбцов вместе с их исходными именами;
- свойство MissingSchemaAction – указывает на то, добавляются ли (игнорируются) отсутствующие исходные таблицы, столбцы и их связи в схему набора данных или вызывают появление ошибки;
- свойство TableMappings – указывает, как исходная таблица отображена на таблице в наборе данных;
- метод Fill() – на основе имени набора данных добавляет или обновляет строки в наборе данных таким образом, чтобы они соответствовали строкам в наборе данных. При внесении изменений используется имя набора данных. Также создается объект таблицы DataTable, имеющий имя Table;
- метод FillSchema() – добавляет объект таблицы DataTable с именем Table в конкретный объект DataSet с одновременной настройкой схемы в соответствии с заданным объектом схемы типа SchemaType;
- метод GetFillParameters() – возвращает набор пользовательских параметров, когда выполняется SQL-запрос SELECT;
- метод Update() – для заданного набора данных типа DataSet вызывает одну из операций INSERT, UPDATE или DELETE для каждой вставленной, измененной и удаленной строки в таблице с именем Table объекта DataTable.
⇑
2.5. Интерфейсы IDataReader и IDataRecord. Чтение строк из таблицы базы данных
Интерфейс IDataReader объявляет общие функции, используемые для чтения данных из хранилища. Если в программе объявляется объект, совместимый с типом IDataReader, то с помощью этого объекта можно просматривать набор данных. Просмотр происходит только в одном (прямом) направлении. Изменение данных запрещено.
Объявление интерфейса IDataReader следующее:
public interface IDataReader : IDisposable, IDataRecord { int Depth { get; } bool IsClosed { get; } int RecordAffected { get; } void Close(); DataTable GetSchemaTable(); bool NextResult(); bool Read(); }
Свойства и методы интерфейса IDataReader имеют следующие назначения:
- свойство Depth – возвращает значение, указывая глубину вложения для текущей строки;
- свойство IsClosed – возвращает значение указывающее закрыт ли объект чтения данных;
- свойство RecordAffected – возвращает количество строк, на которые произошло влияние методами вставки, удаления и изменения в результате выполнения SQL-запроса;
- метод Close() – закрывает объект IDataReader;
- метод GetSchemaTable() – возвращает объект типа DataTable, описывающий метаданные столбца объекта IDataReader;
- метод NextResult() – осуществляет переход к следующему результату в случае чтения результата на основе пакетной SQL-команды;
- метод Read() – осуществляет переход к следующей записи. Если записи нет, то метод возвращает false.
Интерфейс IDataRecord является базовым для интерфейса IDataReader. В этом интерфейсе реализованы элементы, позволяющие извлекать из потока данных строго типизированные значения (int, float, short и т.п.). В интерфейсе IDataRecord объявляется множество методов типа GetXXX(). Сокращенный фрагмент объявления интерфейса следующий:
public interface IDataRecord { int FieldCount; object this[string name] { get; } object this[int i] { get; } bool GetBoolean(int i); byte GetByte(int i); char GetChar(int i); DateTime GetDateTime(int i); Decimal GetDecimal(int i); float GetFloat(int i); short GetInt16(int i); int GetInt32(int i); long GetInt64(int i); ... // Другие элементы ... }
Ниже объясняется содержание некоторых элементов интерфейса IDataRecord:
- свойство FieldCount – возвращает число столбцов в текущей строке;
- GetBoolean() – возвращает значение определенного столбца как boolean;
- GetByte() – возвращает значение определенного столбца как byte;
- GetChar() – возвращает значение определенного столбца как char;
- GetDateTime() – возвращает значение определенного столбца как DateTime;
- GetDecimal() – возвращает значение определенного столбца как Decimal;
- GetFloat() – возвращает значение определенного столбца как float;
- GetInt16(), GetInt32(), GetInt64() – возвращает значение определенного столбца как short, int, long.
⇑
2.6. Интерфейсы IDbDataParameter и IDataParameter. Параметр в запросе
В интерфейсе IDbCommand есть свойство Parameters, возвращающее строго типизированную коллекцию. Эта коллекция реализует интерфейс IDataParameterCollection. Этот интерфейс дает доступ к набору классов, совместимых с интерфейсом IDbDataParameter (объекты параметров). Интерфейс IDbDataParameter расширяет интерфейс IDataParameter.
Объявление интерфейса IDbDataParameter выглядит следующим образом
public interface IDbDataParameter : IDataParameter { byte Precision { get; set; } byte Scale { get; set; } int Size { get; set; } }
Элементы интерфейса IDbDataParameter имеют следующее назначение:
- Precision – определяет точность числовых параметров;
- Scale – определяет масштаб числовых параметров;
- Size – размер параметра.
Интерфейс IDataParameter имеет следующее объявление
public interface IDataParameter { DbType DbType { get; set; } ParameterDirection Direction { get; set; } bool IsNullable { get; } string ParameterName { get; set; } string SourceColumn { get; set; } DataRowVersion SourceVersion { get; set; } object Value { get; set; } }
Составляющие интерфейса IDataParameter имеют следующее назначение
- перечисление DbType – определяет тип данных поля, свойства или объекта типа Parameter провайдера .NET;
- свойство Direction – значение, определяющее, является ли параметр только входным (input-only), только выходным (output-only), двунаправленным (bidirectional) или параметром возврата из хранимой процедуры;
- свойство IsNullable – возвращает значение, определяющее принимает ли параметр значение NULL;
- свойство ParameterName – имя объекта типа IDataParameter;
- свойство SourceColumn – имя столбца, которая является источником отображения на объекте DataSet. Этот источник используется для загрузки или возврата значения IDataParameter.Value;
- свойство SourceVersion – читает или устанавливает объект типа DataRowVersion для того, чтобы использовать его при загрузке объекта IDataParameter.Value;
- свойство Value – предназначено для чтения или установки значения параметра.
⇑
Связанные темы
⇑