Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
Сегодня большое значение имеет работа с данными. Для хранения данных используются различные системы управления базами данных: MS SQL Server, Oracle, MySQL и так далее. И большинство крупных приложений так или иначе используют для хранения данных эти системы управления базами данных. Однако чтобы осуществлять связь между базой данных и приложением на C# необходим посредник. И именно таким посредником является технология ADO.NET.
ADO.NET предоставляет собой технологию работы с данными, которая основана на платформе .NET Framework. Эта технология представляет нам набор классов, через которые мы можем отправлять запросы к базам данных, устанавливать подключения, получать ответ от базы данных и производить ряд других операций.
Причем важно отметить, что систем управления баз данных может быть множество. В своей сущности они могут различаться. 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 и осуществляется взаимодействие с базой данных. Причем для каждого источника данных в ADO.NET может быть свой провайдер, который собственно и определяет конкретную реализацию вышеуказанных классов.
По умолчанию в 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 можно представить следующим образом:
Функционально классы ADO.NET можно разбить на два уровня: подключенный и отключенный. Каждый провайдер данных .NET реализует свои версии объектов Connection, Command, DataReader, DataAdapter и ряда других, который составляют подключенный уровень. То есть с помощью них устанавливается подключение к БД и выполняется с ней взаимодействие. Как правило, реализации этих объектов для каждого конкретного провайдера в своем названии имеют префикс, который указывает на провайдер:
Другие классы, такие как DataSet, DataTable, DataRow, DataColumn и ряд других составляют отключенный уровень, так как после извлечения данных в DataSet мы можем работать с этими данными независимо от того, установлено ли подключение или нет. То есть после получения данных из БД приложение может быть отключено от источника данных.