Spazio dei nomi Microsoft.Data.SqlClient e compatibilità

Il Microsoft.Data.SqlClient namespace contiene il provider di dati .NET supportato per database compatibili con SQL Server. È nato come fork di System.Data.SqlClient e mantiene il familiare modello di programmazione ADO.NET, introducendo nuove funzionalità di SQL Server indipendentemente dal runtime .NET.

Utilizzare Microsoft.Data.SqlClient per nuovi sviluppi.

Installa e importa il namespace

Aggiungi il pacchetto NuGet:

dotnet add package Microsoft.Data.SqlClient

Importa il namespace:

using Microsoft.Data.SqlClient;

La maggior parte delle applicazioni usa SqlConnection, SqlCommand, SqlParameter, SqlDataReader, e SqlTransaction. Per la superficie pubblica completa, vedi il riferimento API Microsoft. Data.SqlClient.

Relazione con ADO.NET

ADO.NET è il modello di accesso ai dati integrato in .NET. Definisce astrazioni indipendenti dal provider nello spazio dei nomi System.Data.Common e Microsoft.Data.SqlClient fornisce le implementazioni concrete.

astrazione ADO.NET Tipo SqlClient Purpose
DbConnection SqlConnection Apre una connessione logica a un database.
DbCommand SqlCommand Esegue testo Transact-SQL (T-SQL) o una stored procedure.
DbParameter SqlParameter Invia un valore digitato separatamente dal testo del comando.
DbDataReader SqlDataReader Trasmette in streaming le righe dei risultati dal server.
DbTransaction SqlTransaction Raggruppa i comandi in un'unica transazione che fa commit o esegue il rollback come unità.
DbDataAdapter SqlDataAdapter Compila e aggiorna gli oggetti disconnessi DataSet e DataTable.
DbBatch SqlBatch Invia più comandi come un unico batch nei framework di destinazione supportati.

Microsoft. Data.SqlClient fornisce anche API specifiche per SQL Server come:

  • SqlBulkCopy
  • SqlConnectionStringBuilder
  • SqlConfigurableRetryFactory
  • SqlDependency
  • Autenticazione, crittografia e supporto dei tipi di dati specifici per SQL Server

Programma contro le astrazioni ADO.NET quando una libreria deve supportare più fornitori di database. Utilizzare i tipi SqlClient quando un'applicazione è destinata a SQL Server e necessita di funzionalità specifiche del provider, come l'autenticazione Microsoft Entra, Always Encrypted, bulk copy, parametri con valori di tabella o logica di tentativi configurabile. Mantenere il codice specifico del fornitore dietro un confine di accesso ai dati se il resto dell'applicazione deve rimanere indipendente dal fornitore.

Accesso online e offline

L'accesso connesso mantiene una connessione aperta mentre un comando viene eseguito e mentre l'applicazione ne legge i risultati. Una richiesta tipica segue questa sequenza:

  1. Crea un SqlConnection da una stringa di connessione e aprila.
  2. Crea un SqlCommand e aggiungi SqlParameter valori.
  3. Eseguire il comando .
  4. Elaborare un valore scalare, un numero di righe interessate o un SqlDataReader.
  5. Eliminare il reader, il comando e la connessione.

Usa l'accesso connesso per la maggior parte delle API web, servizi, lavoratori e applicazioni da riga di comando. SqlDataReader trasmette le righe in streaming e di solito usa meno memoria rispetto al caricamento dell'intero risultato in un DataSet.

L'accesso disconnesso usa SqlDataAdapter per copiare dati in un DataSet o DataTable in memoria. L'applicazione può chiudere la connessione mentre legge o modifica i dati in memoria, poi riconnettersi per inviare aggiornamenti. Usalo per il databinding, relazioni e vincoli in memoria, modifiche offline che riconcili in seguito, o un'applicazione esistente costruita attorno ai DataAdapter. Per nuovi servizi orientati alla richiesta, inizia con SqlCommand e SqlDataReader.

Durata dell'oggetto e concorrenza

Apri e smalti un SqlConnection per ogni unità di lavoro. Il pool di connessione riutilizza la connessione fisica sottostante, quindi non lasciare aperta una connessione globale per tutta la vita di un'applicazione. Elimina rapidamente connessioni, comandi, lettori, transazioni e oggetti di copia in massa. Nel codice asincrono, si usa await using per tipi che implementano IAsyncDisposable sul framework target, come SqlConnection e SqlDataReader su .NET, e ordinario using per tipi che implementano solo IDisposable, come SqlBulkCopy.

SqlConnection, SqlCommand, SqlDataReader, e SqlTransaction non supportano l'uso simultaneo da più thread. Assegnare a ogni operazione concorrente una propria connessione e affidarsi al pooling di connessioni. Multiple Active Result Set (MARS) consente più di un set di risultati attivi su una connessione, ma non rende gli oggetti SqlClient thread-safe.

Relazione con System.Data.SqlClient

System.Data.SqlClientè il provider più vecchio che viene fornito con .NET Framework e versioni precedenti di .NET. Microsoft.Data.SqlClient Utilizza molti nomi di tipo simili, ma ha pacchetti, namespace, impostazioni predefinite, funzionalità e politiche di supporto differenti.

Non fare riferimento a entrambi i fornitori nel nuovo codice applicativo. I tipi con lo stesso nome dei due pacchetti non sono intercambiabili. Un System.Data.SqlClient.SqlConnection, per esempio, non può essere passato dove è richiesto un Microsoft.Data.SqlClient.SqlConnection.

La migrazione di solito inizia aggiungendo il Microsoft.Data.SqlClient pacchetto e cambiando i riferimenti dello spazio dei nomi, ma bisogna anche esaminare la crittografia della connessione, i parametri, la configurazione, le dipendenze transitive e il comportamento in runtime. Segui Migrate da System.Data.SqlClient a Microsoft. Data.SqlClient prima di distribuire.

Compatibilità delle versioni

La versione del pacchetto driver è indipendente dalla versione .NET dell'applicazione e dalla versione del motore di database. Controlla tutti e tre:

Component Cosa verificare
Microsoft.Data.SqlClient La linea di rilascio è supportata e contiene le funzionalità utilizzate dalla tua applicazione.
.NET o .NET Framework L'applicazione mira a un runtime supportato da quella release del driver.
Database compatibile con SQL Server La release del driver supporta la versione del database e il server supporta qualsiasi funzionalità di protocollo richiesta, come TDS 8.0.

Per le matrici attuali, vedi il ciclo di vita del supporto driver SqlClient.

Modifiche specifiche della versione

Le release dei driver possono aggiungere API, spostare dipendenze opzionali e modificare valori predefiniti sicuri. Rivedi i cambiamenti prima di ogni aggiornamento minore o maggiore.

Ecco alcuni esempi:

  • La versione 4.0 ha modificato il valore predefinito di Encrypt in true.
  • La versione 5.0 ha introdotto SqlConnectionEncryptOption e Encrypt=Strict per TDS 8.0.
  • La versione 5.2 ha introdotto SqlBatch per i target .NET moderni supportati.
  • La versione 7.0 ha spostato l'autenticazione Microsoft Entra fornita dal driver in Microsoft.Data.SqlClient.Extensions.Azure.

Scopri le novità di Microsoft. Data.SqlClient per i link alle note di rilascio e un riepilogo degli aggiornamenti.

Alcune funzionalità utilizzano tipi al di fuori del namespace principale o pacchetti opzionali.

Spazio di nomi o pacchetto Purpose
Microsoft.Data.SqlClient.Server Implementazioni SqlClient di SqlDataRecord e SqlMetaData.
Microsoft.Data.SqlTypes Tipi specifici per SqlClient come SqlFileStream, SqlJson, e SqlVector<T>.
Microsoft.Data.SqlClient.Diagnostics Payload di eventi diagnostici fortemente tipizzati.
Microsoft.Data.SqlClient.Extensions.Azure Autenticazione Microsoft Entra fornita dal driver per la versione 7.0 e successive.
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider Integrazione con Azure Key Vault per Always Encrypted.

Non dedurre i requisiti del pacchetto solo da uno spazio di nomi. Segui l'articolo di approfondimento e le informazioni sulle dipendenze del pacchetto NuGet per la versione del driver che utilizzi.