Microsoft。Data.Sql客户端命名空间与兼容性

命名Microsoft.Data.SqlClient空间包含支持的 .NET 数据提供者,用于兼容 SQL Server 的数据库。 它最初是从 System.Data.SqlClient 分支而来的,同时保留了人们熟悉的 ADO.NET 编程模型,并且能够独立于 .NET 运行时发布新的 SQL Server 功能。

请使用 Microsoft.Data.SqlClient 进行新开发。

安装并导入命名空间

添加NuGet包:

dotnet add package Microsoft.Data.SqlClient

导入命名空间:

using Microsoft.Data.SqlClient;

大多数应用使用 SqlConnectionSqlCommandSqlParameterSqlDataReaderSqlTransaction。 完整的公开表面,请参见 Microsoft.Data.SqlClient API 参考

与ADO.NET的关系

Microsoft.Data.SqlClient 实现了来自 System.Data.Common 的与提供程序无关的类型,包括 DbConnectionDbCommandDbDataReaderDbTransaction。 它还提供针对 SQL Server 的专用 API,例如:

  • SqlBulkCopy
  • SqlBatch
  • SqlConnectionStringBuilder
  • SqlConfigurableRetryFactory
  • SqlDependency
  • SQL Server 专用的认证、加密和数据类型支持

有关选择与提供程序无关的 API 或 SqlClient 特定 API 的指导,请参阅 结合 Microsoft.Data.SqlClient 的 ADO.NET 架构

与System.Data.SqlClient的关系

System.Data.SqlClient是较早的供应商,提供 .NET 框架和更早的 .NET 版本。 Microsoft.Data.SqlClient 它使用许多相同的类型名称,但包、命名空间、默认值、功能和支持策略不同。

不要在新的申请代码中提及两个提供者。 来自这两个包的同名类型不能互换使用。 例如,一个 System.Data.SqlClient.SqlConnection 不能传递给需要 Microsoft.Data.SqlClient.SqlConnection 的地方。

迁移通常从添加 Microsoft.Data.SqlClient 包和更改命名空间引用开始,但你还必须审查连接加密、参数、配置、传递依赖和运行时行为。 在部署之前,请先按照 从 System.Data.SqlClient 迁移到 Microsoft.Data.SqlClient 进行操作。

版本兼容性

驱动程序包版本独立于应用程序的 .NET 版本和数据库引擎版本。 请查看这三部作品:

组件 需要验证的内容
Microsoft.Data.SqlClient 发布行是支持的,包含你的应用所用的功能。
.NET 或 .NET 框架 该应用程序的目标运行时由该驱动版本支持。
兼容SQL Server的数据库 驱动版本支持数据库版本,服务器支持任何请求的协议功能,如TDS 8.0。

关于当前矩阵,请参见 SqlClient 驱动支持生命周期

版本特定的更改

驱动程序发布可以添加API、移动可选依赖,并更改安全默认。 每次进行次要更新或重大更新前,都要检查更改。

示例包括:

  • 4.0版本默认改 Encrypttrue
  • 5.0 版本引入了用于 TDS 8.0 的 SqlConnectionEncryptOptionEncrypt=Strict
  • 5.2版本引入SqlBatch于支持的现代.NET目标上。
  • 7.0版本将驱动程序提供的Microsoft Entra认证迁移到了 Microsoft.Data.SqlClient.Extensions.Azure

请参阅 Microsoft.Data.SqlClient 中的新增功能,了解发布说明链接和升级摘要。

部分功能使用主命名空间外的类型或可选包。

命名空间或包 Purpose
Microsoft.Data.SqlClient.Server SqlDataRecordSqlMetaData 的 SqlClient 实现。
Microsoft.Data.SqlTypes SqlClient 专有类型,例如 SqlFileStreamSqlJsonSqlVector<T>
Microsoft.Data.SqlClient.Diagnostics 强类型的诊断事件负载。
Microsoft.Data.SqlClient.Extensions.Azure 适用于 7.0 及更高版本的由驱动程序提供的 Microsoft Entra 身份验证
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider Azure 密钥保管库 与 Always Encrypted 集成。

不要仅凭命名空间推断包的需求。 请参照专题文章以及针对所使用驱动程序版本的 NuGet 包依赖信息。