Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Microsoft. Data.SqlClient is de ondersteunde aanbieder van nieuwe SQL Server-functies in .NET-applicaties. Het behoudt het ADO.NET-programmeermodel dat door System.Data.SqlClientwordt gebruikt, maar de pakketten, namespaces, standaarden en sommige publieke types verschillen.
Behandel de migratie als een provider-update, niet alleen als een vervanging van de naamruimte.
De migratie plannen
Voordat je de code verandert:
Noteer de versies van .NET,
System.Data.SqlClient, SQL Server en Microsoft SQL-diensten die de applicatie ondersteunt.Inventariseer authenticatiemodi, sleutelwoorden voor verbindingsreeksen, aangepaste certificaten, Always Encrypted-providers, de configuratie van
DbProviderFactories, door de gebruiker gedefinieerde typen van SQL Server en het gebruik vanSystem.Data.SqlTypes.Voer de huidige tests van de applicatie uit en sla een basislijn op voor verbindings-, query-, transactie-, herpoging- en prestatiegedrag.
Zoek directe en transitieve pakketreferenties:
dotnet list package --include-transitive
Migreer één applicatie of gedeelde datatoegangsbibliotheek tegelijk. Geef geen provider-specifieke objecten door tussen code die nog steeds gebruikt System.Data.SqlClient en code die .Microsoft.Data.SqlClient
Vervang het pakket
Verwijder een expliciete System.Data.SqlClient pakketreferentie, indien aanwezig:
dotnet remove package System.Data.SqlClient
Voeg Microsoft toe. Data.SqlClient:
dotnet add package Microsoft.Data.SqlClient
Als Microsoft. Data.SqlClient 7.0 of later een door de driver geleverde Microsoft Entra-authenticatiemodus gebruikt, voeg dan ook toe:
dotnet add package Microsoft.Data.SqlClient.Extensions.Azure --version <same-version-as-Microsoft.Data.SqlClient>
Voor versie- en pakketselectie, zie Installeren, updaten en deployen Microsoft. Data.SqlClient.
Naamruimten bijwerken
Vervang de naamruimte van de primaire provider:
-using System.Data.SqlClient;
+using Microsoft.Data.SqlClient;
Werk de volledig gekwalificeerde namen, aliassen, gegenereerde code, registraties voor afhankelijkheidsinjectie, reflectiestrings, configuratie en testdubbels bij die verwijzen naar System.Data.SqlClient.
Vervang de algemene System.Data of System.Data.Common naamruimtes niet.
Microsoft.Data.SqlClientblijft ADO.NET-typen gebruiken zoals CommandType, DbType, , IsolationLevel, DataTable, DbConnectionen DbCommand uit die naamruimtes.
Sommige SQL Server-specifieke types verplaatsen zich naar andere Microsoft.Data namespaces:
| Type | Vorige naamruimte | Microsoft.Data.SqlClient-naamruimte |
|---|---|---|
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 |
In Microsoft.Data.SqlClient 5.0 en later blijven andere SQL Server common language runtime (CLR)-typen in Microsoft.SqlServer.Server. Werk elk type bij van compilerfouten en de Microsoft. Data.SqlClient API-referentie, in plaats van de hele naamruimte te vervangen.
Update de configuratie van .NET Framework
Een applicatie die providers via DbProviderFactories omzet, heeft mogelijk een providerregistratie nodig in App.config of 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>
Werk de code bij waarmee de provider-invariante naam wordt opgevraagd:
DbProviderFactory factory =
DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");
Voeg deze configuratie niet toe wanneer de applicatie direct aanmaakt SqlConnection en niet gebruikt DbProviderFactories.
Bekijk encryptie en certificaatvalidatie
Microsoft. Data.SqlClient gebruikt veiligere standaardinstellingen dan System.Data.SqlClient.
| Gedrag | System.Data.SqlClient | Microsoft.Data.SqlClient |
|---|---|---|
| Standaardencryptie | Encrypt=false |
Encrypt=true Vanaf versie 4.0 |
| Validatie van servercertificaat | Valideert het certificaat alleen wanneer clientversleuteling is ingeschakeld | Vanaf versie 2.0 wordt het certificaat volgens TrustServerCertificate gevalideerd wanneer de server versleuteling afdwingt, zelfs als Encrypt=false |
| Strikte encryptie | Niet ondersteund |
Encrypt=Strict beginnend met versie 5.0 voor TDS 8.0-compatibele servers |
SqlConnectionStringBuilder.Encrypt soort |
bool |
SqlConnectionEncryptOption Vanaf versie 5.0 |
Stel Encrypt=false of TrustServerCertificate=true niet in als een algemene migratieoplossing. Configureer een certificaat dat de client vertrouwt en gebruik een servernaam die overeenkomt met het certificaat.
TrustServerCertificate=true Gebruik het alleen voor gecontroleerde ontwikkelomgevingen waar validatie niet mogelijk is.
De wijziging naar SqlConnectionEncryptOption is broncompatibel in veelvoorkomende toewijzingen via impliciete conversies, maar het is een binaire breuk. Compileer elke assembly die toegang heeft tot SqlConnectionStringBuilder.Encrypt opnieuw.
Voor details, zie Versleuteling en certificaatvalidatie.
Bekijk verbindingsstrings
Microsoft. Data.SqlClient voegt trefwoorden en aliassen toe die System.Data.SqlClient niet herkent. Zo accepteert het aliasen met ruimtes zoals Application Intent en Multi Subnet Failover.
Bouw geen verbindingsreeks met Microsoft.Data.SqlClient.SqlConnectionStringBuilder en geef die dan door aan System.Data.SqlClient. Houd tijdens een gefaseerde migratie elke verbindingsreeks builder gekoppeld aan zijn provider.
Controleer authenticatie, encryptie, herkansing, failover en certificaatsleutelwoorden op basis van de syntaxis van de verbindingsstring.
Bekijk het gedrag van parameters
Test datum- en tijdparameters expliciet:
| Parameter | System.Data.SqlClient-gedrag | Microsoft. Data.SQL Klantgedrag |
|---|---|---|
DbType.Time met een DateTime waarde |
Accepteert de waarde | Gebruik een TimeSpan waarde |
DbType.Date met een DateTime waarde |
Kan datum- en tijdcomponenten verzenden | Snijdt tijdcomponenten af |
Specificeer SqlDbType, lengte, precisie en schaal voor parameters waarbij SQL Server-type-inferentie queryplannen of conversiegedrag kan veranderen. Gebruik het niet AddWithValue als migratiesnelkoppeling wanneer het databasetype bekend is.
Controleer transitieve providerreferenties
Een directe verwijdering van pakketten garandeert niet dat dat System.Data.SqlClient weg is. Voer de volgende opdracht uit:
dotnet list package --include-transitive
Als beide zorgverleners blijven:
- Identificeer het pakket dat
System.Data.SqlClientinstalleert. - Werk die afhankelijkheid bij of vervang die afhankelijkheid wanneer mogelijk.
- Houd provider-specifieke types binnen de afhankelijkheidsgrens wanneer beide moeten blijven.
- Gebruik expliciete namespace-aliasen alleen als tijdelijke hulp. Geef geen verbinding, transactie, parameter of lezer door van de ene provider naar de andere.
Let vooral specifiek op SQL Server CLR-typebibliotheken en oudere frameworks voor gegevenstoegang die System.Data.SqlClienttypen in hun openbare API’s blootstellen.
Bekijk globaliseringsgedrag
.NET Framework en .NET-versies vóór .NET 5 gebruiken National Language Support (NLS) globalisering op Windows. De huidige .NET-versies gebruiken standaard International Components for Unicode (ICU) op Windows, Linux en macOS.
Dit verschil in runtime kan sommige SqlString vergelijkingen veranderen. SQL Server gebruikt NLS-vergelijkingsgedrag. Als vergelijkingen aan de clientzijde SqlString moeten overeenkomen met het servergedrag, test dan de betreffende waarden en raadpleeg Globalization and ICU. Een applicatie kan NLS gebruiken in plaats van ICU wanneer dat nodig is.
Globalisatie-invariante modus wordt niet ondersteund door Microsoft. Data.SqlClient.
Valideer de gemigratiede applicatie
Bouw en test op elk ondersteund doelframework en besturingssysteem.
Valideren:
- Herstellen van pakketten en gepubliceerde uitvoer.
- SQL-authenticatie, Windows-geïntegreerde authenticatie en Microsoft Entra-authenticatie die door de applicatie worden gebruikt.
- onderhandeling van TLS, certificaatvalidatie en parseren van verbindingsreeksen.
- Verbindingspooling en toegangstokenvernieuwing.
- Parametertypes, nulwaarden, precisie, schaal, datum en tijdsgedrag.
- Transacties, annulering, time-outs, herpogingen en failover.
- Always Encrypted, SQL Server CLR-typen, bulkkopieën, querymeldingen en andere provider-specifieke functies die door de applicatie worden gebruikt.
- Loggen, tellers, tracering en uitzonderingsafhandeling.
Voer representatieve queries uit op elke ondersteunde versie van de database-engine. Een succesvolle compilatie valideert geen connectiebeveiliging, runtime-afhankelijkheden of dataconversies.