O novo Microsoft.Data.SqlClient

Por que a Microsoft transferiu o SqlClient para novos binários no pacote NuGet Microsoft.Data.SqlClient? Devo trocar? Lançamentos futuros? Namespaces?

O Microsoft.Data.SqlClient ou Microsoft SqlClient Data Provider for SQL Server foi lançado em 27 de agosto de 2019.

O novo namespace Microsoft.Data.SqlClient é uma substituição para o existente System.Data.SqlClient.

A mudança de namespace é necessária porque o novo Provedor de Dados reside em um pacote NuGet e entraria em conflito com o System.Data.SqlClient, que reside no .NET Framework a nível de sistema.

O novo Microsoft.Data.SqlClient suporta .NET Framework 4.6 +, .NET Core 2.1 + e .NET Standard 2.0 +.

Por quê?

O tradicional System.Data.SqlClient reside dentro do .NET framework e existe uma versão separada para o .NET core também. Para poder lançar novos recursos para o SqlClient mais rapidamente, agora é distribuído em um pacote NuGet separado, feito no novo namespace Microsoft.Data.SqlClient. Desta forma, ele é desconectado dos ciclos de lançamento do .NET Framework e pode ser lançado mais independentemente à medida que o SQL Server lança novos recursos.

Portanto, o novo pacote Microsoft.Data.SqlClient é uma substituição para a parte tradicional System.Data.Client do .NET e do .NET Core. Em termos de código, deve ser suficiente apenas alterar as declarações de using / imports para os novos namespaces, pois as APIs permanecem as mesmas.

Devo usá-lo ou devo ficar com o antigo?

A Microsoft favorecerá o desenvolvimento de novos recursos neste novo pacote NuGet a partir de agora. Por exemplo, o pacote Microsoft SQL Server EF Core Database Provider, a partir da versão 3.0, usa o novo pacote Microsoft.Data.SqlClient. Portanto, olhando para o futuro, é a coisa certa começar a usar o Microsoft.Data.SqlClient em vez do System.Data.SqlClient que será mantido, mas não receberá atualizações de recursos.

O desenvolvimento de sistemas .NET Framework (em oposição ao .NET Core) também se beneficiará, pois agora começará a enviar a versão usada junto com seus binários e não depende da configuração do sistema de destino, ou seja, da versão instalada do .NET Framework (que fornece o System.Data.SqlClient).

Recursos

Observe que existem binários diferentes dependendo do seu alvo e que a disponibilidade de recursos difere.

Always Encrypted está disponível no System.Data.SqlClient para .NET, mas NÃO no .NET Core.
Always Encrypted está disponível no Microsoft.Data.SqlClient para .NET e TAMBÉM no .NET Core.

Recursos do SQL Server 2019 como Classificação de Dados e suporte a UTF8 são suportados pelo novo Microsoft.Data.SqlClient, mas não pelo antigo System.Data.SqlClient.

O Microsoft.Data.SqlClient é o driver de acesso a dados principal para o SQL Server e será o único local onde a Microsoft implementará novos recursos daqui para frente.

Mudanças de Namespace

Substituir significa mudar namespaces.

AnteriorAgora é
System.Data.SqlClientMicrosoft.Data.SqlClient
Microsoft.SqlServer.ServerMicrosoft.Data.SqlClient.Server
System.Data.SqlTypesMicrosoft.Data.SqlTypes
System.Data.SqlMicrosoft.Data.Sql
System.DataMicrosoft.Data