Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Microsoft. Data.SqlClient è il fornitore supportato per le nuove funzionalità di SQL Server nelle applicazioni .NET. Preserva il modello di programmazione ADO.NET usato da System.Data.SqlClient, ma i pacchetti, i namespace, i valori predefiniti e alcuni tipi pubblici differiscono.
Tratta la migrazione come un aggiornamento del provider, non solo come una semplice sostituzione dello spazio dei nomi.
Pianificare la migrazione
Prima di cambiare codice:
Registra le versioni dei servizi .NET,
System.Data.SqlClientSQL Server e Microsoft SQL supportati dall'applicazione.Modalità di autenticazione dell'inventario, parole chiave della stringa di connessione, certificati personalizzati, provider Always Encrypted, configurazione di
DbProviderFactories, tipi definiti dall'utente in SQL Server e utilizzo diSystem.Data.SqlTypes.Esegui i test attuali dell'applicazione e salva una base per il comportamento di connessione, interrogazione, transazione, ritentativi e prestazioni.
Cerca riferimenti di pacchetti diretti e transitivi:
dotnet list package --include-transitive
Migra una libreria di accesso dati condivisa o applicazione alla volta. Non passare oggetti specifici del provider tra codice che ancora usa System.Data.SqlClient e codice che usa Microsoft.Data.SqlClient.
Sostituisci il pacchetto
Rimuovere un riferimento esplicito System.Data.SqlClient al packaging, se presente:
dotnet remove package System.Data.SqlClient
Aggiungi Microsoft. Data.SqlClient:
dotnet add package Microsoft.Data.SqlClient
Se Microsoft. Data.SqlClient 7.0 o successiva utilizza una modalità di autenticazione Microsoft Entra fornita dal driver, aggiungi anche:
dotnet add package Microsoft.Data.SqlClient.Extensions.Azure --version <same-version-as-Microsoft.Data.SqlClient>
Per la selezione di versione e pacchetto, vedi Installa, aggiorna e distribuisci Microsoft. Data.SqlClient.
Aggiornare namespace
Sostituire il namespace principale del fornitore:
-using System.Data.SqlClient;
+using Microsoft.Data.SqlClient;
Aggiorna i nomi completi, gli alias, il codice generato, le registrazioni per l'inserimento delle dipendenze, le stringhe usate per il meccanismo di riflessione, la configurazione e i sostituti di test che fanno riferimento a System.Data.SqlClient.
Non sostituire i namespace generali System.Data o System.Data.Common.
Microsoft.Data.SqlClientcontinua a usare tipi ADO.NET come CommandType, DbType, IsolationLevel, DataTable, DbConnection, e DbCommand da quei namespace.
Alcuni tipi specifici di SQL Server si spostano in altri Microsoft.Data namespace:
| TIPO | Namespace precedente | Spazio dei nomi Microsoft.Data.SqlClient |
|---|---|---|
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 |
Nella Microsoft.Data.SqlClient versione 5.0 e successiva, altri tipi di runtime del common language (CLR) di SQL Server rimangono in Microsoft.SqlServer.Server. Aggiorna ogni tipo in base agli errori del compilatore e alla documentazione di riferimento dell'API Microsoft.Data.SqlClient, anziché sostituire l'intero namespace.
Aggiorna la configurazione del framework .NET
Un'applicazione che individua i provider tramite DbProviderFactories potrebbe richiedere la registrazione di un provider in App.config o 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>
Codice di aggiornamento che richiede il nome invariante del provider:
DbProviderFactory factory =
DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");
Non aggiungere questa configurazione quando l'applicazione crea SqlConnection direttamente e non utilizza DbProviderFactories.
Revisionare la crittografia e la validazione dei certificati
Microsoft. Data.SqlClient utilizza valori predefiniti più sicuri rispetto a System.Data.SqlClient.
| Behavior | System.Data.SqlClient | Microsoft.Data.SqlClient |
|---|---|---|
| Crittografia predefinita | Encrypt=false |
Encrypt=true A partire dalla versione 4.0 |
| Convalida certificato del server | Valida il certificato solo quando la crittografia client è abilitata | A partire dalla versione 2.0, il certificato viene validato in base a TrustServerCertificate quando il server impone la crittografia, anche se Encrypt=false |
| Crittografia rigorosa | Non supportato |
Encrypt=Strict a partire dalla versione 5.0 per server compatibili TDS 8.0 |
SqlConnectionStringBuilder.Encrypt tipo |
bool |
SqlConnectionEncryptOption A partire dalla versione 5.0 |
Non impostare Encrypt=false o TrustServerCertificate=true come soluzione generale per la migrazione. Configura un certificato di cui il client si fida e usa un nome server che corrisponda al certificato. Usa TrustServerCertificate=true solo per ambienti di sviluppo controllati dove la validazione non è possibile.
La modifica di SqlConnectionEncryptOption è compatibile a livello di codice sorgente nelle assegnazioni più comuni tramite conversioni implicite, ma introduce una rottura della compatibilità binaria. Ricompila ogni assembly che accede a SqlConnectionStringBuilder.Encrypt.
Per i dettagli, vedere Crittografia e convalida di certificati.
Revisiona le stringhe di connessione
Microsoft. Data.SqlClient aggiunge parole chiave e alias che System.Data.SqlClient non riconosce. Ad esempio, accetta alias con spazi come Application Intent e Multi Subnet Failover.
Non costruire una stringa di connessione con Microsoft.Data.SqlClient.SqlConnectionStringBuilder e poi passarla a System.Data.SqlClient. Durante una migrazione graduale, mantieni ogni generatore di stringhe di connessione associato al relativo provider.
Verifica le parole chiave di autenticazione, crittografia, nuovo tentativo, failover e dei certificati in base alla sintassi delle stringhe di connessione.
Esamina il comportamento dei parametri
Testare esplicitamente i parametri di data e ora:
| Parametro | Comportamento di System.Data.SqlClient | Comportamento di Microsoft.Data.SqlClient |
|---|---|---|
DbType.Time con valore DateTime |
Accetta il valore | Usa un TimeSpan valore |
DbType.Date con valore DateTime |
Può inviare componenti di data e ora | Tronca le componenti temporali |
Specifica SqlDbType, lunghezza, precisione e scala per parametri in cui l'inferenza di tipo SQL Server può modificare i piani di query o il comportamento di conversione. Non usarla AddWithValue come scorciatoia per la migrazione quando il tipo di database è noto.
Controlla le referenze dei fornitori transitivi
La rimozione diretta di un pacchetto non garantisce che System.Data.SqlClient venga rimosso. Corri!
dotnet list package --include-transitive
Se entrambi i fornitori rimangono:
- Identifica il pacchetto che include
System.Data.SqlClient. - Aggiorna o sostituisci quella dipendenza quando possibile.
- Mantenere i tipi specifici del fornitore all'interno del confine della dipendenza quando entrambi devono essere mantenuti.
- Usa pseudonimi espliciti solo come aiuto temporaneo. Non passare una connessione, transazione, parametro o lettore da un fornitore all'altro.
Presta particolare attenzione alle librerie CLR di tipo SQL Server e ai vecchi framework di accesso ai dati che espongono System.Data.SqlClient tipi nelle loro API pubbliche.
Rivedi il comportamento della globalizzazione
Le versioni di .NET Framework e .NET precedenti a .NET 5 utilizzano la globalizzazione National Language Support (NLS) su Windows. Le versioni attuali di .NET utilizzano di default International Components for Unicode (ICU) su Windows, Linux e macOS.
Questa differenza nel runtime può influire su alcuni confronti SqlString. SQL Server utilizza il comportamento di confronto NLS. Se i confronti sul lato SqlString client devono corrispondere al comportamento del server, verifica i valori interessati e consulta Globalizzazione e ICU. Un'applicazione può utilizzare NLS invece della terapia intensiva quando necessario.
La modalità invariante alla globalizzazione non è supportata da Microsoft. Data.SqlClient.
Valida l'applicazione migrata
Compila ed esegui i test su ogni framework di destinazione e sistema operativo supportato.
Convalidare:
- Ripristino del pacchetto e risultato pubblicato.
- Autenticazione SQL, autenticazione integrata Windows e autenticazione Microsoft Entra utilizzate dall'applicazione.
- Negoziazione TLS, convalida dei certificati e analisi sintattica della stringa di connessione.
- Pooling delle connessioni e aggiornamento del token di accesso.
- Tipi di parametri, valori nulli, precisione, scala, data e comportamento temporale.
- Transazioni, cancellazioni, timeout, nuovi tentativi e failover.
- Always Encrypted, tipi CLR di SQL Server, copia in blocco, notifiche delle query e altre funzionalità specifiche del provider utilizzate dall'applicazione.
- Registrazione, contatori, tracciamento e gestione delle eccezioni.
Esegui query rappresentative su ogni versione supportata del motore di database. Una compilazione di successo non convalida la sicurezza della connessione, le dipendenze a runtime o le conversioni di dati.