Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пространство имен Microsoft.Data.SqlClient включает поддерживаемый поставщик данных .NET для баз данных, совместимых с SQL Server. Изначально это было ответвление от System.Data.SqlClient, и оно сохраняет знакомую модель программирования ADO.NET, при этом новые функции SQL Server поставляются независимо от среды выполнения .NET.
Используйте Microsoft.Data.SqlClient для новой разработки.
Установка и импорт пространства имён
Добавьте пакет NuGet:
dotnet add package Microsoft.Data.SqlClient
Импортируйте пространство имён:
using Microsoft.Data.SqlClient;
Большинство приложений используют SqlConnection, SqlCommand, SqlParameterSqlDataReader, и SqlTransaction. Для полной публичной поверхности см. ссылку на API Microsoft. Data.SqlClient.
Связь с ADO.NET
ADO.NET — это модель доступа к данным, встроенная в .NET. Он определяет независимые от провайдера абстракции в пространстве имён System.Data.Common, а Microsoft.Data.SqlClient предоставляет конкретные реализации.
| Абстракция ADO.NET | Тип SqlClient | Purpose |
|---|---|---|
| DbConnection | SqlConnection | Открывает логическое соединение с одной базой данных. |
| DbCommand | SqlCommand | Выполняет Transact-SQL текст (T-SQL) или сохранённую процедуру. |
| DbParameter | SqlParameter | Отправляет введённое значение отдельно от командного текста. |
| DbDataReader | SqlDataReader | Передаёт строки результата потоком с сервера. |
| DbTransaction | SqlTransaction | Объединяет команды в одну транзакцию, которая коммитирует или откатывается как единое целое. |
| DbDataAdapter | SqlDataAdapter | Заполняет и обновляет отключенные объекты DataSet и DataTable. |
| DbBatch | SqlBatch | Отправляет несколько команд одним пакетом для поддерживаемых целевых платформ. |
Microsoft. Data.SqlClient также предоставляет специфические для SQL Server API такие, как:
SqlBulkCopySqlConnectionStringBuilderSqlConfigurableRetryFactorySqlDependency- Поддержка аутентификации, шифрования и типов данных, специфичных для SQL Server
Программировать против абстракций ADO.NET, когда библиотека должна поддерживать несколько поставщиков баз данных. Используйте типы SqlClient, когда приложение нацелено на SQL Server и нуждается в специфических для провайдера функциях, таких как аутентификация Microsoft Entra, Always Encrypted, массовое копирование, параметры с табличным значением или настраиваемая логика повторных попыток. Оставляйте код, специфичный для провайдера, в пределах слоя доступа к данным, если остальная часть приложения должна оставаться независимой от провайдера.
Онлайн- и офлайн-доступ
Подключённый доступ оставляет соединение открытым, пока выполняется команда и пока приложение читает её результаты. Типичный запрос следует следующей последовательности:
- Создайте
SqlConnectionиз строка подключения и откройте её. - Создайте
SqlCommandи добавьте значенияSqlParameter. - Выполните команду .
- Обрабатывайте скалярное значение, количество затронутых строк или объект
SqlDataReader. - Избавьтесь от считывателя, команды и соединения.
Используйте подключённый доступ для большинства веб-API, сервисов, рабочих и командных приложений.
SqlDataReader передаёт строки потоком и обычно использует меньше памяти, чем при загрузке всего результата в DataSet.
Автономный доступ использует SqlDataAdapter для копирования данных в память DataSet или DataTable. Приложение может закрыть соединение во время чтения или изменения данных в памяти, а затем снова подключиться для отправки обновлений. Используйте его для привязки данных, отношений и ограничений в памяти, офлайн-правок, которые вы позже синхронизируете, или для существующего приложения, построенного на основе DataAdapters. Для новых сервисов, ориентированных на запросы, начинайте с SqlCommand и SqlDataReader.
Время жизни объектов и параллелизм
Откройте и освобождайте SqlConnection для каждой единицы работы. Пул соединений повторно использует базовое физическое соединение, поэтому не оставляйте одно глобальное соединение открытым на весь срок службы приложения. Быстро избавляйтесь от соединений, команд, считывателей, транзакций и массового копирования объектов. В асинхронном коде используйте await using для типов, реализующих IAsyncDisposable на целевом фреймворке, таких как SqlConnection и SqlDataReader на .NET, и обычный using для типов, реализующих только IDisposable, например SqlBulkCopy.
SqlConnection, SqlCommand, SqlDataReader и SqlTransaction не поддерживают одновременное использование несколькими потоками. Дайте каждой параллельной операции отдельное соединение и полагайтесь на пул соединений. Технология Multiple Active Result Sets (MARS) допускает наличие нескольких активных наборов результатов в одном соединении, но не делает объекты SqlClient потокобезопасными.
Связь с System.Data.SqlClient
System.Data.SqlClientэто старый провайдер, который поставляется с .NET Framework и более ранними версиями .NET.
Microsoft.Data.SqlClient использует многие одинаковые типовые имена, но имеет разные пакеты, пространства имён, настройки по умолчанию, функции и политики поддержки.
Не ссылайтесь на обоих провайдеров в новом коде приложения. Типы с одинаковыми названиями из двух пакетов не взаимозаменяемы. Например, System.Data.SqlClient.SqlConnection нельзя передать там, где требуется Microsoft.Data.SqlClient.SqlConnection.
Миграция обычно начинается с добавления пакета Microsoft.Data.SqlClient и изменения ссылок на пространство имён, но также необходимо проверить шифрование соединений, параметры, конфигурацию, транзитивные зависимости и поведение во время выполнения. Перед развертыванием выполните инструкции в статье Переход с System.Data.SqlClient на Microsoft.Data.SqlClient.
Совместимость версий
Версия пакета драйверов независима от версии приложения в .NET и версии движка базы данных. Проверьте все три:
| Component | Что проверить |
|---|---|
| Microsoft.Data.SqlClient | Выпускная линия поддерживается и содержит функции, используемые вашим приложением. |
| .NET или .NET Фреймворк | Приложение ориентировано на среду выполнения, поддерживаемую этим выпуском драйвера. |
| База данных, совместимых с SQL Server | Версия драйвера поддерживает версию базы данных, а сервер — любые запрошенные функции протокола, такие как TDS 8.0. |
Для актуальных матриц см. жизненный цикл поддержки драйверов SqlClient.
Изменения, связанные с версией
Выпуски драйверов могут добавлять API, перемещать опциональные зависимости и менять безопасные настройки по умолчанию. Проверяйте изменения перед каждым незначительным или крупным обновлением.
Вот некоторые примеры:
- В версии 4.0 для
Encryptпо умолчанию установлено значениеtrue. - В версии 5.0 были представлены
SqlConnectionEncryptOptionиEncrypt=Strictдля TDS 8.0. - В версии 5.2 была представлена функция
SqlBatchдля поддерживаемых современных целевых платформ .NET. - Версия 7.0 переместила аутентификацию Microsoft Entra, предоставляемую драйвером, в
Microsoft.Data.SqlClient.Extensions.Azure.
Посмотрите, что нового в Microsoft. Data.SqlClient — ссылки на релизные заметки и обзор обновлений.
Связанные пространства имён и пакеты
Некоторые функции используют типы вне основного пространства имён или опциональные пакеты.
| Пространство имён или пакет | Purpose |
|---|---|
Microsoft.Data.SqlClient.Server |
Реализации SqlDataRecord и SqlMetaData в SqlClient. |
Microsoft.Data.SqlTypes |
Типы, специфичные для SqlClient, например SqlFileStream, SqlJson и SqlVector<T>. |
Microsoft.Data.SqlClient.Diagnostics |
Строго типизированные данные диагностических событий. |
Microsoft.Data.SqlClient.Extensions.Azure |
Аутентификация Microsoft Entra, предоставляемая драйвером, для версии 7.0 и более поздних версий. |
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider |
Интеграция Azure Key Vault для Always Encrypted |
Не делайте выводы о требованиях пакета только по пространству имён. Ознакомьтесь со статьёй с описанием функций и сведениями о зависимостях пакета NuGet для используемой версии драйвера.