Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ADO.NET — это модель доступа к данным, встроенная в .NET. Microsoft. Data.SqlClient реализует эту модель для баз данных, совместимых с SQL Server, и добавляет специфические для SQL Server возможности.
Страница Microsoft.Data.SqlClient содержит сведения о возможностях драйвера и базовом уровне для рабочей среды. В этой статье объясняется, как драйвер вписывается в ADO.NET.
Абстракции ADO.NET и типы SqlClient
ADO.NET определяет независимые от провайдера абстракции в пространстве имён System.Data.Common. Microsoft. Data.SqlClient предоставляет конкретные реализации.
| Абстракция ADO.NET | Тип SqlClient | Purpose |
|---|---|---|
| DbConnection | SqlConnection | Открывает логическое соединение с одной базой данных. |
| DbCommand | SqlCommand | Выполняет SQL-текст или сохранённую процедуру. |
| DbParameter | SqlParameter | Отправляет введённое значение отдельно от командного текста. |
| DbDataReader | SqlDataReader | Передаёт строки результата потоком с сервера. |
| DbTransaction | SqlTransaction | Объединяет команды в одну атомарную транзакцию. |
| DbDataAdapter | SqlDataAdapter | Заполняет и обновляет отключенные объекты DataSet и DataTable. |
| DbBatch | SqlBatch | Отправляет несколько команд одним пакетом для поддерживаемых целевых платформ. |
Программировать против абстракций ADO.NET, когда библиотека должна поддерживать несколько поставщиков баз данных. Используйте типы SqlClient, когда приложение ориентировано на SQL Server и нуждается в специфических для провайдера функций.
Доступ к подключённым данным
Подключённый доступ сохраняет соединение доступным, пока выполняется команда и пока приложение читает её результаты.
Распространённый запрос следует следующей последовательности:
- Создайте
SqlConnectionиз строки подключения. - Откройте подключение.
- Создайте
SqlCommandи добавьте значенияSqlParameter. - Выполните команду .
- Обрабатывайте скалярное значение, количество затронутых строк или
SqlDataReader. - Избавьтесь от считывателя, команды и соединения.
Используйте подключённый доступ для большинства веб-API, сервисов, рабочих и командных приложений.
SqlDataReader передаёт строки потоком и обычно использует меньше памяти, чем при загрузке всего результата в DataSet.
Открытие и удаление SqlConnection для каждой единицы работы — это стандартный подход. Пул соединений повторно использует базовую физическую связь. Не держите одно глобальное соединение открытым на весь срок действия приложения.
Отключённый доступ к данным
SqlDataAdapterпередаёт данные между SQL Server и встроенным в память DataSet или DataTable. Приложение может закрыть соединение во время чтения или изменения данных в памяти, а затем снова подключиться для отправки обновлений.
Используйте отключённый доступ, когда это необходимо:
- Привязка данных к
DataSetилиDataTable. - Отношения и ограничения в памяти
- Офлайн-правки, которые согласовываются позже.
- Совместимость с существующим приложением, построенным на основе DataAdapters.
Для новых сервисов, ориентированных на запросы, начинайте с SqlCommand и SqlDataReader если вам не нужна разъединённая объектная модель.
Специфичные для SQL Server функции
Microsoft. Data.SqlClient добавляет API и поведение соединения, которые не входят в независимый от провайдера контракт ADO.NET:
- Аутентификация Microsoft Entra и обратные вызовы токенов доступа.
- Строгое шифрование TDS 8.0 и опции сертификации SQL Server.
- Всегда зашифрованные и безопасные анклавы.
-
SqlBulkCopyдля высокопроизводительной загрузки данных. - Параметры с табличным значением.
- Типы данных SQL Server, включая JSON и векторные типы.
- Настраиваемая логика повторных попыток.
- Диагностика, статистика и счетчики SQL Server.
- Варианты доступности и резервного подключения.
Использование этих функций связывает этот код с Microsoft. Data.SqlClient. Оставляйте код, специфичный для провайдера, в пределах слоя доступа к данным, если остальная часть приложения должна оставаться независимой от провайдера.
Время жизни объектов и параллелизм
Быстро избавляйтесь от соединений, команд, считывателей, транзакций и массового копирования объектов. Используйте await using с асинхронным кодом, когда тип реализует IAsyncDisposable.
SqlConnection, SqlCommand, SqlDataReader и SqlTransaction не поддерживают одновременное использование несколькими потоками. Дайте каждой параллельной операции отдельное соединение и полагайтесь на пул соединений. Технология Multiple Active Result Sets (MARS) допускает наличие нескольких активных наборов результатов в одном соединении, но не делает объекты SqlClient потокобезопасными.
Пакеты и пространства имён
Установите пакет Microsoft.Data.SqlClient NuGet и импортируйте пространство имен Microsoft.Data.SqlClient. Драйвер поставляется отдельно от .NET, поэтому сроки выпуска новых функций, релизов и поддержки у него отличаются от сроков среды выполнения .NET.
System.Data.SqlClient Это более старый поставщик. Используйте Microsoft. Data.SqlClient для новой разработки. Для существующего приложения следуйте инструкциям из раздела Переход с System.Data.SqlClient на Microsoft.Data.SqlClient.