Stringhe di connessione in ADO.NET

Una stringa di connessione contiene informazioni di inizializzazione che vengono passate come parametro da un provider di dati a un'origine dati. Il provider di dati riceve la stringa di connessione come valore della proprietà DbConnection.ConnectionString. Il provider analizza la stringa di connessione e garantisce che la sintassi sia corretta e che le parole chiave siano supportate. Quindi il metodo DbConnection.Open() passa i parametri di connessione analizzati all'origine dati. L'origine dati esegue una convalida ulteriore e stabilisce una connessione.

Sintassi della stringa di connessione

Una stringa di connessione è un elenco delimitato da punti e virgola composto da coppie di parametri chiave/valore:

keyword1=value; keyword2=value;

Le parole chiave non fanno distinzione tra maiuscole e minuscole. I valori, tuttavia, possono fare distinzione tra maiuscole e minuscole, a seconda dell'origine dati. Sia le parole chiave che i valori possono contenere spazi vuoti. Lo spazio vuoto iniziale e finale viene ignorato nelle parole chiave e nei valori non racchiusi tra virgolette.

Se un valore contiene il punto e virgola, caratteri di controllo Unicode o uno spazio vuoto iniziale o finale, deve essere racchiuso tra virgolette singole o doppie. Ad esempio:

Keyword=" whitespace  ";
Keyword='special;character';

Il carattere di inclusione potrebbe non essere presente nel valore che racchiude. Pertanto, un valore contenente virgolette singole può essere racchiuso solo tra virgolette doppie e viceversa:

Keyword='double"quotation;mark';
Keyword="single'quotation;mark";

È anche possibile tralasciare il carattere di inclusione usandone due insieme:

Keyword="double""quotation";
Keyword='single''quotation';

Le virgolette stesse, così come il segno di uguale, non richiedono caratteri di escape, pertanto sono valide le seguenti stringhe di connessione:

Keyword=no "escaping" 'required';
Keyword=a=b=c

Poiché ogni valore viene letto fino al punto e virgola successivo o alla fine della stringa, il valore nell'ultimo esempio è a=b=c e il punto e virgola finale è facoltativo.

Tutte le stringhe di connessione condividono la stessa sintassi di base descritta in precedenza. Il set di parole chiave riconosciute dipende tuttavia dal provider e si è evoluto nel corso degli anni dalle API precedenti, ad esempio ODBC. Il provider di dati .NET Framework per SQL Server (SqlClient) supporta molte parole chiave delle API meno recenti, ma in genere è più flessibile e accetta sinonimi per molte delle parole chiave delle stringhe di connessione comuni.

Gli errori di ortografia possono produrre errori. Ad esempio Integrated Security=true è valido, mentre IntegratedSecurity=true genera un errore.

Le stringhe di connessione create manualmente in fase di esecuzione da input dell'utente non convalidato sono vulnerabili ad attacchi injection alle stringhe e compromettono la sicurezza nell'origine dati. Per risolvere questi problemi, in ADO.NET 2.0 sono stati introdotti nuovi generatori di stringhe di connessione per ogni provider di dati .NET Framework. Questi generatori di stringhe di connessione espongono i parametri come proprietà fortemente tipizzate e consentono di convalidare la stringa di connessione prima che venga inviata all'origine dati.

Importante

Microsoft consiglia di usare il flusso di autenticazione più sicuro disponibile. Se ci si connette ad Azure SQL, le Identità gestite per le risorse Azure sono il metodo di autenticazione consigliato.

In questa sezione

Generatori di stringhe di connessione
Viene illustrato come usare le classi ConnectionStringBuilder per creare stringhe di connessione valide in fase di esecuzione.

Stringhe di connessione e file di configurazione
Viene illustrato come archiviare e recuperare le stringhe di connessione nei file di configurazione.

Sintassi della stringa di connessione
Viene descritto come configurare stringhe di connessione specifiche del provider per SqlClient, OracleClient, OleDb e Odbc.

Protezione delle informazioni di connessione
Vengono illustrate tecniche per proteggere le informazioni usate per la connessione a un'origine dati.

Vedi anche