Язык программирования C#9 и платформа .NET5
Шрифт:
Поставщик данных OLE DB, который состоит из типов, определенных в пространстве имен
System.Data.OleDb
, позволяет получать доступ к данным в любом хранилище данных, поддерживающем классический протокол OLE DB на основе СОМ. Из-за зависимости от СОМ этот поставщик будет работать только в среде Windows и считается устаревшим в межплатформенном мире .NET Core. Типы из пространства имен System.Data
Из всех пространств имен, относящихся к ADO.NET,
System.Data
является "наименьшим общим знаменателем". Оно содержит типы, которые совместно используются всеми поставщиками данных ADO. NET независимо от лежащего в основе хранилища данных.
NoNullAllowedException
, RowNotlnTableException
и MissingPrimaryKeyException
), пространство имен System.Data
содержит типы, которые представляют разнообразные примитивы баз данных (вроде таблиц, строк, столбцов и ограничений), а также общие интерфейсы, реализуемые классами поставщиков данных. В табл. 21.3 описаны основные типы, о которых следует знать. Следующей задачей будет исследование основных интерфейсов
System.Data
на высоком уровне, что поможет лучше понять общую функциональность, предлагаемую любым поставщиком данных. В ходе чтения настоящей главы вы также ознакомитесь с конкретными деталями, а пока лучше сосредоточить внимание на общем поведении каждого типа интерфейса. Роль интерфейса IDbConnection
Интерфейс
IDbConnection
реализован объектом подключения поставщика данных. В нем определен набор членов, применяемых для конфигурирования подключения к специфичному хранилищу данных. Он также позволяет получить объект транзакции поставщика данных. Вот формальное определение IDbConnection
:
public interface IDbConnection : IDisposable
{
string ConnectionString { get; set; }
int ConnectionTimeout { get; }
string Database { get; }
ConnectionState State { get; }
IDbTransaction BeginTransaction;
IDbTransaction BeginTransaction(IsolationLevel il);
void ChangeDatabase(string databaseName);
void Close;
IDbCommand CreateCommand;
void Open;
void Dispose;
}
Роль интерфейса IDbTransaction
Перегруженный метод
BeginTransaction
, определенный в интерфейсе IDbConnection
, предоставляет доступ к объекту транзакции поставщика. Члены, определенные интерфейсом IDbTransaction
, позволяют программно взаимодействовать с транзакционным сеансом и лежащим в основе хранилищем данных:
public interface IDbTransaction : IDisposable
{
IDbConnection Connection { get; }
IsolationLevel IsolationLevel { get; }
void Commit;
void Rollback;
void Dispose;
}
Роль интерфейса IDbCommand
Интерфейс
IDbCommand
будет реализован объектом команды поставщика данных. Подобно другим объектным моделям доступа к данным объекты команд позволяют программно манипулировать операторами SQL, хранимыми процедурами и параметризированными запросами. Объекты команд также обеспечивают доступ к типу чтения данных поставщика данных посредством перегруженного метода ExecuteReader
:
public interface IDbCommand : IDisposable
{
string CommandText { get; set; }
int CommandTimeout { get; set; }
CommandType CommandType { get; set; }
IDbConnection Connection { get; set; }
IDbTransaction Transaction { get; set; }
IDataParameterCollection Parameters { get; }
UpdateRowSource UpdatedRowSource { get; set; }
void Prepare;
void Cancel;
IDbDataParameter CreateParameter;
int ExecuteNonQuery;
IDataReader ExecuteReader;
IDataReader ExecuteReader(CommandBehavior behavior);
object ExecuteScalar;
void Dispose;
}
Роль интерфейсов IDbDataParameter и IDataParameter
Обратите внимание, что свойство
Parameters
интерфейса IDbCommand
возвращает строго типизированную коллекцию, реализующую интерфейс IDataParameterCollection
, который предоставляет доступ к набору классов, совместимых с IDbDataParameter
(например, объектам параметров):
public interface IDbDataParameter : IDataParameter
{
// Плюс члены интерфейса IDataParameter.
byte Precision { get; set; }
byte Scale { get; set; }
int Size { get; set; }
}
Интерфейс
IDbDataParameter
расширяет 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; }
}
Вы увидите, что функциональность интерфейсов I
DbDataParameter
и IDataParameter
позволяет представлять параметры внутри команды SQL (включая хранимые процедуры) с помощью специфических объектов параметров ADO.NET вместо жестко закодированных строковых литералов.
Поделиться с друзьями: