Чтение онлайн

ЖАНРЫ

Язык программирования 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 вместо жестко закодированных строковых литералов.

Поделиться с друзьями: