Введение в ADO.NET
Что такое ADO.NET?
Сегодня большое значение имеет работа с данными. Для хранения данных используются различные системы управления базами данных: MS SQL Server, Oracle, MySQL и так далее. И большинство крупных приложений так или иначе используют для хранения данных эти системы управления базами данных. Однако чтобы осуществлять связь между базой данных и приложением на C# необходим посредник. И именно таким посредником является технология ADO.NET.
Причем важно отметить, что систем управления баз данных может быть множество. В своей сущности они могут различаться. MS SQL Server, например, для создания запросов использует язык T-SQL, а MySQL и Oracle применяют язык PL-SQL. Разные системы баз данных могут иметь разные типы данных. Также могут различаться какие-то другие моменты. Однако функционал ADO.NET построен таким образом, чтобы предоставить разработчикам унифицированный интерфейс для работы с самыми различными СУБД.
Основу интерфейса взаимодействия с базами данных в ADO.NET представляет ограниченный круг объектов: Connection, Command, DataReader, DataSet и DataAdapter. С помощью объекта Connection происходит установка подключения к источнику данных. Объект Command позволяет выполнять операции с данными из БД. Объект DataReader считывает полученные в результате запроса данные. Объект DataSet предназначен для хранения данных из БД и позволяет работать с ними независимо от БД. И объект DataAdapter является посредником между DataSet и источником данных. Главным образом, через эти объекты и будет идти работа с базой данных.
По умолчанию в ADO.NET имеются следующие встроенные провайдеры:
Провайдер для MS SQL Server
Провайдер для OLE DB (Предоставляет доступ к некоторым старым версиям MS SQL Server, а также к БД Access, DB2, MySQL и Oracle)
Провайдер для ODBC (Провайдер для тех источников данных, для которых нет своих провайдеров)
Провайдер для Oracle
Провайдер EntityClient. Провайдер данных для технологии ORM Entity Framework
Провайдер для сервера SQL Server Compact 4.0
Кроме этих провайдеров, которые являются встроенными, существует также множество других, предназначенных для различных баз данных, например, для MySQL.
Основные пространства имен, которые используются в ADO.NET:
System.Data : определяет классы, интерфейсы, делегаты, которые реализуют архитектуру ADO.NET
System.Data.Common : содержит классы, общие для всех провайдеров ADO.NET
System.Data.Design : определяет классы, которые используются для создания своих собственных наборов данных
System.Data.Odbc : определяет функциональность провайдера данных для ODBC
System.Data.OleDb : определяет функциональность провайдера данных для OLE DB
System.Data.Sql : хранит классы, которые поддерживают специфичную для SQL Server функциональность
System.Data.OracleClient : определяет функциональность провайдера для баз данных Oracle
System.Data.SqlClient : определяет функциональность провайдера для баз данных MS SQL Server
System.Data.SqlServerCe : определяет функциональность провайдера для SQL Server Compact 4.0
System.Data.SqlTypes : содержит классы для типов данных MS SQL Servera
Microsoft.SqlServer.Server : хранит компоненты для взаимодействия SQL Server и среды CLR
Схематично архитектуру ADO.NET можно представить следующим образом:
Другие классы, такие как DataSet, DataTable, DataRow, DataColumn и ряд других составляют отключенный уровень, так как после извлечения данных в DataSet мы можем работать с этими данными независимо от того, установлено ли подключение или нет. То есть после получения данных из БД приложение может быть отключено от источника данных.
Обзор ADO.NET
— нечто большее, чем надстройка над каким-нибудь существующим API-интерфейсом. Сходство с ADO минимально; классы и методы доступа к данным довольно существенно отличаются.
— это библиотека компонентов СОМ, получившая в последние несколько лет множество воплощений. ADO состоит, прежде всего, из объектов Connection, Command, Recordset и Field. С помощью ADO открывается соединение с базой данных, после чего некоторые данные извлекаются и помещаются в набор записей, состоящих из полей; эти данные затем претерпевают манипуляции и обновления на сервере, после чего соединение закрывается. Кроме того, ADO предлагает так называемый отключенный набор записей (disconnected record set), который используется, когда соединение с базой нежелательно удерживать открытым в течение длительного времени.
Существует несколько проблем, которые ADO не решает удовлетворительным образом. Наиболее заметная из них — громоздкость (в плане физического размера) отключенного набора записей. Потребность в этом средстве возрастает по мере развития веб-ориентированных вычислений, поэтому в данном случае понадобился свежий подход. Переход от ADO к ADO.NET не должен быть слишком трудным, поскольку между этими технологиями все же имеется некоторое сходство.
Более того, если вы используете SQL Server, существует замечательный набор управляемых классов, которые настроены на обеспечение максимальной производительности базы данных. Одного этого достаточно для перехода на ADO.NET.
С точки зрения программиста, тело ADO.NET составляет базовая сборка с именем System.Data.dll. В этом двоичном файле находится значительное количество пространств имен, многие из которых представляют типы конкретного поставщика данных ADO.NET:
Большинство шаблонов проектов Visual Studio 2010 автоматически ссылаются на эту ключевую библиотеку доступа к данным. Однако для импортирования нужных пространств имен необходимо изменить кодовые файлы, например:
Учтите также, что кроме System.Data.dll, существуют и другие ориентированные на ADO.NET сборки (например, System.Data.OracleClient.dll и System.Data.Entity.dll), которые необходимо вручную указывать в текущем проекте с помощью диалогового окна Add Reference (Добавление ссылки).
Три стороны ADO.NET
Библиотеки ADO.NET можно применять тремя концептуально различными способами: в подключенном режиме, в автономном режиме и с помощью технологии Entity Framework. При использовании подключенного уровня (connected layer), кодовая база явно подключается к соответствующему хранилищу данных и отключается от него. При таком способе использования ADO.NET обычно происходит взаимодействие с хранилищем данных с помощью объектов подключения, объектов команд и объектов чтения данных.
Автономный уровень (disconnected layer), позволяет работать с набором объектов DataTable (содержащихся в DataSet), который представляет на стороне клиента копию внешних данных. При получении DataSet с помощью соответствующего объекта адаптера данных подключение открывается и закрывается автоматически. Понятно, что этот подход помогает быстро освобождать подключения для других вызовов и повышает масштабируемость систем.
Получив объект DataSet, вызывающий код может просматривать и обрабатывать данные без затрат на сетевой трафик. А если нужно занести изменения в хранилище данных, то адаптер данных (вместе с набором операторов SQL) задействуется для обновления данных — при этом подключение открывается заново для проведения обновлений в базе, а затем сразу же закрывается.
Архитектура ADO.NET
Обработка данных традиционно полагалась в основном на двухуровневую модель, основанную на сетевом соединении. Так как при обработке данных все больше используется многоуровневая архитектура, программисты переходят на метод, не использующий подключение, чтобы обеспечить лучшую масштабируемость для их приложений.
Компоненты ADO.NET
DataSet

Архитектура ADO.NET
Выбор между DataReader или DataSet
При принятии решения о том, следует ли использовать в приложении DataReader (см. статью получение данных с помощью DataReader) или DataSet (см. раздел DataSets, DataTables и представления данных), следует рассмотреть тип функций, необходимых приложению. DataSet предназначен для выполнения следующих задач.
Локальное кэширование данных в приложении для последующей обработки. Если нужно только считывать результаты запроса, класс DataReader подходит наилучшим образом.
Удаленное взаимодействие с данными между уровнями или от веб-службы XML.
Динамическое взаимодействие с данными, например привязка к элементу управления Windows Forms или комбинирование и связывание данных из нескольких источников.
Выполнение интенсивной обработки, не требующей открытого соединения с источником данных, что освобождает соединение для использования другими клиентами.
LINQ to DataSet
LINQ to SQL
LINQ to SQL поддерживает запросы к модели объектов, сопоставленной со структурами данных реляционной базы данных, без использования промежуточной концептуальной модели. Каждая таблица представляется отдельным классом; таким образом, модель объектов тесно привязывается к схеме реляционной базы данных. LINQ to SQL преобразует запросы LINQ из модели объектов в язык Transact-SQL и передает их в базу данных для выполнения. При возврате результатов базой данных LINQ to SQL преобразует результаты обратно в объекты. Дополнительные сведения см. в разделе LINQ to SQL.
ADO.NET Entity Framework
Платформа ADO.NET Entity Framework разработана, чтобы разработчики могли создавать приложения для доступа к данным путем программирования по концептуальной модели приложения, а не по реляционной схеме хранения. Ее целью является уменьшение объема кода и затрат на сопровождение приложений, ориентированных на обработку данных. дополнительные сведения см. в разделе ADO.NET Entity Framework.
Службы данных WCF
WCF Data Services используется для развертывания служб данных в интернете или интрасети. Данные структурируются как сущности и отношения согласно спецификациям модели EDM. Данные, развертываемые в данной модели, адресуются по стандартному протоколу HTTP. Дополнительные сведения см. в разделе Службы данных WCF 4.5.
ADO.NET. Элементы теории
При размещении БД на персональном компьютере, который не находится в сети, БД всегда используется в монопольном режиме. Даже если БД используют несколько пользователей, они могут работать с ней только последовательно, и поэтому вопросов о поддержании корректной модификации БД в этом случае здесь не стоит, они решаются организационными мерами — то есть определением требуемой последовательности работы конкретных пользователей с соответствующей БД.
Однако работа на изолированном компьютере с небольшой базой данных в настоящий момент становится уже нехарактерной для большинства приложений. БД отражает информационную модель реальной предметной области, она растет по объему и резко увеличивается количество задач, решаемых с ее использованием, и в соответствии с этим увеличивается количество приложений, работающих с единой базой данных. Компьютеры объединяются в локальные сети, и необходимость распределения приложений, работающих с единой базой данных по сети, является несомненной.
Модели «клиент-сервер» в технологии баз данных
Вычислительная модель «клиент—сервер» исходно связана с парадигмой открытых систем, которая появилась в 90-х годах и быстро эволюционировала. Сам термин «клиент—сервер» исходно применялся к архитектуре программного обеспечения, которое описывало распределение процесса выполнения по принципу взаимодействия двух программных процессов, один из которых в этой модели назывался «клиентом», а другой — «сервером». Клиентский процесс запрашивал некоторые услуги, а серверный процесс обеспечивал их выполнение. При этом предполагалось, что один серверный процесс может обслужить множество клиентских процессов.
Основной принцип технологии «клиент—сервер» применительно к технологии баз данных заключается в разделении функций стандартного интерактивного приложения на 5 групп, имеющих различную природу:
Двухуровневые модели
Двухуровневые модели фактически являются результатом распределения пяти указанных функций между двумя процессами, которые выполняются на двух платформах: на клиенте и на сервере. В чистом виде почти никакая модель не существует, однако рассмотрим наиболее характерные особенности каждой двухуровневой модели.
1) Модель удаленного управления данными. Модель файлового сервера (File Server). В этой модели презентационная логика и бизнес-логика располагаются на клиенте. На сервере располагаются файлы с данными и поддерживается доступ к файлам. Функции управления информационными ресурсами в этой модели находятся на клиенте.
2) Модель удаленного доступа к данным (Remote Data Access). В ней база данных хранится на сервере. На сервере же находится ядро СУБД. На клиенте располагается презентационная логика и бизнес-логика приложения. Клиент обращается к серверу с запросами, например, на языке SQL.
3) Модель сервера баз данных. В этой модели бизнес-логика разделена между клиентом и сервером. На сервере бизнес-логика реализована в виде хранимых процедур — специальных программных модулей, которые хранятся в БД и управляются непосредственно СУБД. Клиентское приложение обращается к серверу с командой запуска хранимой процедуры, а сервер выполняет эту процедуру и регистрирует все изменения в БД, которые в ней предусмотрены. Сервер возвращает клиенту данные, релевантные его запросу, которые требуются клиенту либо для вывода на экран, либо для выполнения части бизнес-логики, которая расположена на клиенте. Трафик обмена информацией между клиентом и сервером резко уменьшается. Централизованный контроль в модели сервера баз данных выполняется с использованием механизма триггеров. Триггеры также являются частью БД.
Трехуровневая модель сервера приложений
Эта модель является расширением двухуровневой модели и в ней вводится дополнительный промежуточный уровень между клиентом и сервером. Этот промежуточный уровень содержит один или несколько серверов приложений. В этой модели компоненты приложения делятся между тремя исполнителями:
1) Клиент обеспечивает логику представления, включая графический пользовательский интерфейс, локальные редакторы; клиент может запускать локальный код приложения клиента, который может содержать обращения к локальной БД, расположенной на компьютере-клиенте. Клиент исполняет коммуникационные функции front-end части приложения, которые обеспечивают доступ клиенту в локальную или глобальную сеть. Дополнительно реализация взаимодействия между клиентом и сервером может включать в себя управление распределенными транзакциями.
2) Серверы приложений составляют новый промежуточный уровень архитектуры. Они спроектированы как для исполнения общих незагружаемых функций клиентов. Серверы приложений поддерживают функции клиентов как частей взаимодействующих рабочих групп, поддерживают сетевую доменную операционную среду, хранят и исполняют наиболее общие правила бизнес-логики, поддерживают каталоги с данными, обеспечивают обмен сообщениями и поддержку запросов, особенно в распределенных транзакциях.
3) Серверы баз данных в этой модели занимаются исключительно функциями СУБД: обеспечивают функции создания и ведения БД, поддерживают целостность реляционной БД, обеспечивают функции хранилищ данных (Warehouse services). Кроме того, на них возлагаются функции создания резервных копий БД и восстановления БД после сбоев и управления выполнением транзакций.
Отметим, что эта модель обладает большей гибкостью, чем двухуровневые модели. Наиболее заметны преимущества модели сервера приложений в тех случаях, когда клиенты выполняют сложные аналитические расчеты над базой данных, которые относятся к области OLAP-приложений (On-line analytical processing). В этой модели большая часть бизнес-логики клиента изолирована от возможностей встроенного SQL, реализованного в конкретной СУБД, и может быть выполнена на стандартных языках программирования. Это повышает переносимость системы и ее масштабируемость.
Архитектура ADO.NET
Как мы видим, обработка данных традиционно полагалась в основном на двухуровневую модель, основанную на сетевом соединении. Так как при обработке данных все больше используется многоуровневая архитектура, программисты переходят на методы, не использующие постоянное подключение к БД, но обеспечивающие лучшую масштабируемость приложений.
Мы рассмотрим два уровня работы с ADO.NET:
подключенный уровень (connected layer) — позволяет взаимодействовать с базой данных с помощью объектов подключения, чтения данных и команд конкретного поставщика данных;
отключенный уровень (disconnected layer) — позволяет смоделировать в оперативной памяти данные из базы данных с помощью многочисленных классов из пространства имен System.Data (DataSet, DataTable и т.д.)
Существует и третья возможность взаимодействия с базами данных через объектную модель C#, с помощью ORM-фреймворка Entity Framework 4.0, которую мы пока рассматривать не будем.
Пространство имен System.Data
С точки зрения программиста, тело ADO.NET составляет базовая сборка с именем System.Data.dll. В этом двоичном файле находятся пространства имен, которые представляют типы конкретного поставщика данных ADO.NET, это: Odbs < >, OleDb < >, SqlClient < >, и кроме того: Common < >, Sql < >, SqlTypes < >и другие.
Большинство шаблонов проектов Visual Studio автоматически ссылаются на эту ключевую библиотеку System.Data < >доступа к данным. Однако для импорта нужных пространств имен необходимо изменить кодовые файлы, например:
Учтите также, что кроме System.Data.dll, существуют и другие ориентированные на ADO.NET сборки (например, System.Data.OracleClient.dll или System.Data.Entity.dll), которые необходимо вручную указывать в текущем проекте с помощью диалогового окна Add Reference (Добавление ссылки).
Компоненты ADO.NET
— это компоненты, которые специально сконструированы для обработки данных и быстрого, однопроходного доступа к данным только для чтения:
Конкретные имена этих основных классов различаются у различных поставщиков (например, SqlConnection, OleDbConnection, OdbcConnection и MySqlConnection), но все эти объекты порождены от одного и того же базового класса (в случае объектов подключения это DbConnection), который реализует идентичные интерфейсы (вроде IDbConnection). Поэтому если вы научитесь работать с одним поставщиком данных, то легко справитесь и с остальными.
Класс DataSet в ADO.NET
— специально сконструирован для доступа к данным независимо от источника данных. Поэтому он может быть использован со многими и разными источниками данных, с XML-данными или для управления данными, локальными для приложения. DataSet содержит коллекцию одного или нескольких объектов DataTable, состоящих из строк и столбцов данных, а также первичный ключ, внешний ключ, ограничение и связанные сведения о данных в объектах DataTable.
Основы ADO.NET
Введение
ADO.NET – это набор классов (фреймворк) для работы с базами данных, а также XML файлами. Аббревиатура ADO расшифровывается как ActiveX Data Objects. Данная технология имеет методы и классы для извлечения и обработки данных.
ASP.NET Web Applications
Структуры подсоединения к БД
ADO.NET и его библиотеки классов
На данной диаграмме видны различные типы приложений (Веб приложения, консольные приложения, приложения для Windows и так далее), использующие ADO.NET для подсоединения к БД (SQL Server, Oracle, OleDb, ODBC, XML-файлы и так далее).
Классы в ADO.NET
1. Connection Class
Данные классы применяются в ADO.NET для подсоединения к БД.
Тема связана со специальностями:
2. Command Class
3. DataReader Class
DataReader используется для получения данных. Он используется в сочетании с Command Class для выполнения SQL-запроса.
5. DataSet Class
Класс DataSet – сердце ADO.NET, представляющее из себя набор объектов DataTable. Каждый такой объект содержит много объектов DataColumn и DataRow.
Подключение ADO.NET к базе данных
Для настройки подключения Вы должны быть знакомы со строками подключения (connection strings). ConnectionString – строка переменной (регистр не учитывается). Строки подключения нужны нам для параметра SQLConnection. Данные примеры содержат основные значения, а именно: provider, server, database, userid и password.
SQL Аутентификация
String constr= «server=.;database=institute;user > ;
String constr= «data source=.;initial catalog=institute;uid=rakesh;pwd=abc@213» ;
Windows Аутентификация ( Windows Authentication)
String constr= «server=.;database=institute;trusted_connection=true»
String constr= «server=.;initial catalog=institute;integrated security=true»
Видео курсы по схожей тематике:
C# Базовый (ООП) 2021
How to C# Углубленный
Получение и отображение данных из базы данных
Ниже приведен код для подсоединения к SQL:
public partial class WebForml : System.Web.UI.Page
protected void Page_Load( object sender, EventArgs e)
SqlConnection con = new SqlConnection ( «data source=.; database=Sample; integrated security=SSPI» );
SqlDataReader rdr = cmd.ExecuteReader();
Вы должны использовать System.Data.SqlClient для подключения к SQL. В предыдущем коде мы использовали классы SqlConnection, SqlCommand и SqlDataReader, потому что наше приложение обращалось к SQL Server, а он понимает только SQL.
Бесплатные вебинары по схожей тематике:
Создание игры “Space Invaders” на C# с нуля
От процедурного программирования к ООП via C Sharp















