Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft. Data.SqlClient är den stödda leverantören av nya SQL Server-funktioner i .NET-applikationer. Den bevarar ADO.NET-programmeringsmodellen som används av System.Data.SqlClient, men paket, namnrymder, standardinställningar och vissa publika typer skiljer sig åt.
Behandla migreringen som en uppdatering av leverantören, inte bara som en namnrymdsersättning.
Planera migreringen
Innan du ändrar koden:
Registrera de versioner av .NET,
System.Data.SqlClient, SQL Server och Microsoft SQL-tjänster som applikationen stödjer.Inventarieautentiseringslägen, nyckelord för reťazec pripojenia, anpassade certifikat, Always Encryption-leverantörer,
DbProviderFactorieskonfiguration, användardefinierade SQL Server-typer ochSystem.Data.SqlTypesanvändning.Kör applikationens aktuella tester och spara en baslinje för anslutning, förfrågan, transaktion, omförsök och prestandabeteende.
Sök direkta och transitiva paketreferenser:
dotnet list package --include-transitive
Migrera en applikation eller ett delat dataåtkomstbibliotek åt gången. Skicka inte leverantörsspecifika objekt mellan kod som fortfarande använder System.Data.SqlClient och kod som använder Microsoft.Data.SqlClient.
Byt ut paketet
Ta bort en explicit System.Data.SqlClient paketreferens, om den finns:
dotnet remove package System.Data.SqlClient
Lägg till Microsoft. Data.SqlClient:
dotnet add package Microsoft.Data.SqlClient
Om Microsoft. Data.SqlClient 7.0 eller senare använder ett drivrutinstillhandahållet Microsoft Entra-autentiseringsläge, lägg också till följande:
dotnet add package Microsoft.Data.SqlClient.Extensions.Azure --version <same-version-as-Microsoft.Data.SqlClient>
För versions- och paketval, se Installera, uppdatera och distribuera Microsoft. Data.SqlClient.
Uppdatera namnområden
Byt ut namnrymden för primär leverantör:
-using System.Data.SqlClient;
+using Microsoft.Data.SqlClient;
Uppdatera fullt kvalificerade namn, alias, genererad kod, beroendeinjektionsregistreringar, reflektionssträngar, konfiguration och testdubblar som refererar till System.Data.SqlClient.
Byt inte ut general- System.Data eller System.Data.Common namnrymder.
Microsoft.Data.SqlClientfortsätter att använda ADO.NET-typer såsom CommandType, DbType, , IsolationLevel, DataTable, DbConnectionoch DbCommand från dessa namnrymder.
Vissa SQL Server-specifika typer flyttar till andra Microsoft.Data namnrymder:
| Type | Föregående namnområde | Microsoft.Data.SqlClient-namnrymd |
|---|---|---|
SqlDataRecord, SqlMetaData |
Microsoft.SqlServer.Server |
Microsoft.Data.SqlClient.Server |
SqlFileStream |
System.Data.SqlTypes |
Microsoft.Data.SqlTypes |
SqlNotificationRequest |
System.Data.Sql |
Microsoft.Data.Sql |
OperationAbortedException |
System.Data |
Microsoft.Data |
I Microsoft.Data.SqlClient 5.0 och senare finns andra SQL Server common language runtime (CLR)-typer kvar i Microsoft.SqlServer.Server. Uppdatera varje typ utifrån kompilatorfel och Microsoft.Data.SqlClient API-referensen, i stället för att ersätta hela namnrymden.
Uppdatera konfigurationen av .NET Framework
Ett program som slår upp providers via DbProviderFactories kan behöva en providerregistrering i App.config eller Web.config:
<configuration>
<system.data>
<DbProviderFactories>
<add name="SqlClient Data Provider"
invariant="Microsoft.Data.SqlClient"
description=".NET data provider for SQL Server"
type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient" />
</DbProviderFactories>
</system.data>
</configuration>
Uppdatera koden som begär det leverantörsinvarianta namnet:
DbProviderFactory factory =
DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");
Lägg inte till denna konfiguration när applikationen skapar SqlConnection direkt och inte använder DbProviderFactories.
Granska kryptering och certifikatvalidering
Microsoft. Data.SqlClient använder säkrare standardinställningar än System.Data.SqlClient.
| Behavior | System.Data.SqlClient | Microsoft.Data.SqlClient |
|---|---|---|
| Standardkryptering | Encrypt=false |
Encrypt=true Med start från version 4.0 |
| Verifiering av servercertifikat | Validerar certifikatet endast när klientkryptering är aktiverad | Från och med version 2.0 valideras certifikatet enligt TrustServerCertificate när servern tvingar kryptering, även om Encrypt=false |
| Strikt kryptering | Stöds ej |
Encrypt=Strict med start från version 5.0 för TDS 8.0-kompatibla servrar |
Typ: SqlConnectionStringBuilder.Encrypt |
bool |
SqlConnectionEncryptOption Med start från version 5.0 |
Ange inte vare sig Encrypt=false eller TrustServerCertificate=true som en allmän lösning för migrering. Konfigurera ett certifikat som klienten litar på och använd ett servernamn som matchar certifikatet. Använd TrustServerCertificate=true endast för kontrollerade utvecklingsmiljöer där validering inte är möjlig.
Ändringen till SqlConnectionEncryptOption är källkodskompatibel i vanliga tilldelningar genom implicita konverteringar, men det är en binär brytande förändring. Kompilera om varje assembly som har åtkomst till SqlConnectionStringBuilder.Encrypt.
Mer information finns i Kryptering och certifikatverifiering.
Granska anslutningssträngar
Microsoft. Data.SqlClient lägger till nyckelord och alias som System.Data.SqlClient inte känner igen. Till exempel accepterar den aliaser med mellanrum som Application Intent och Multi Subnet Failover.
Bygg inte en reťazec pripojenia med Microsoft.Data.SqlClient.SqlConnectionStringBuilder och skicka den sedan till System.Data.SqlClient. Under en stegvis migrering, håll varje reťazec pripojenia-byggare ihopparad med dess leverantör.
Granska autentisering, kryptering, omförsök, failover och certifikatnyckelord mot anslutningssträngens syntax.
Granska parameterbeteende
Testdatum och tidparameter explicit:
| Parameter | System.Data.SqlClient-beteende | Microsoft.Data.SqlClient-beteende |
|---|---|---|
DbType.Time med ett DateTime värde |
Accepterar värdet | Använd ett TimeSpan värde |
DbType.Date med ett DateTime värde |
Kan skicka datum- och tidkomponenter | Trunkerar tidskomponenterna |
Specificera SqlDbType, längd, precision och skala för parametrar där SQL Server-typinferens kan ändra frågeplaner eller konverteringsbeteende. Använd inte AddWithValue som en genväg för migration när databastypen är känd.
Kontrollera referenser för transitiva leverantörer
Att ta bort ett paket garanterar inte att System.Data.SqlClient försvinner. Run:
dotnet list package --include-transitive
Om båda vårdgivarna kvarstår:
- Identifiera paketet som tar in
System.Data.SqlClient. - Uppdatera eller byt ut det beroendet när det är möjligt.
- Håll leverantörsspecifika typer inom beroendegränsen när båda måste finnas kvar.
- Använd explicita namnrymdalias endast som ett tillfälligt hjälpmedel. Skicka inte en anslutning, transaktion, parameter eller läsare från en leverantör till en annan.
Var särskilt uppmärksam på SQL Server CLR-typbibliotek och äldre dataåtkomstramverk som exponerar System.Data.SqlClient typer i sina publika API:er.
Granska globaliseringsbeteende
.NET Framework och .NET-versioner före .NET 5 använder National Language Support (NLS) globalisering på Windows. Nuvarande .NET-versioner använder International Components for Unicode (ICU) som standard på Windows, Linux och macOS.
Denna skillnad i körtid kan ändra vissa SqlString jämförelser. SQL Server använder NLS-jämförelsebeteende. Om klientjämförelser måste matcha serverbeteendeSqlString, testa påverkade värden och granska Globalization och ICU. En applikation kan använda NLS istället för intensivvård vid behov.
Globaliseringsinvariant läge stöds inte av Microsoft. Data.SqlClient.
Validera den migrerade applikationen
Bygg och testa på varje stödd målramverk och operativsystem.
Validera:
- Paketåterställning och publicerade utdata.
- SQL-autentisering, Windows-integrerad autentisering och Microsoft Entra-autentisering används av applikationen.
- TLS-förhandling, certifikatvalidering och reťazec pripojenia-parsing.
- Anslutningspoolning och uppdatering av access-token.
- Parametertyper, nollvärden, precision, skala, datum och tidsbeteende.
- Transaktioner, annullering, tidsgränser, nya försök och automatisk växling vid fel.
- Always Encrypted, SQL Server CLR-typer, masskopiering, frågeaviseringar och andra leverantörsspecifika funktioner som används av applikationen.
- Loggning, räknare, spårning och hantering av undantag.
Kör representativa frågor mot alla stödda databasmotorversioner. En lyckad kompilering validerar inte anslutningssäkerhet, beroenden i körtid eller datakonverteringar.