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.
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:
SqlBulkCopySqlConnectionStringBuilderSqlConfigurableRetryFactorySqlDependency- 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:
- Crea un
SqlConnectionda una stringa di connessione e aprila. - Crea un
SqlCommande aggiungiSqlParametervalori. - Eseguire il comando .
- Elaborare un valore scalare, un numero di righe interessate o un
SqlDataReader. - 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
Encryptintrue. - La versione 5.0 ha introdotto
SqlConnectionEncryptOptioneEncrypt=Strictper TDS 8.0. - La versione 5.2 ha introdotto
SqlBatchper 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.
Namespace e pacchetti correlati
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.