Area di riferimento
- Integrating Data in a Windows Forms Application
- Manage connections
Gestione delle connesssioni
Ci sono diversi modi per configurare una connessione ad una base di dati.
- Configurare una connessione utilizzando Server Explorer
- Configurare una connessione utilizzando il Connection Wizard
- Configurare una connessione utilizzando la classe Connection e quelle specifiche
Di seguito alcune immagini che mostrano come avviare i primi due wizard:
Il framework mette a disposizione diverse classi Connection specifiche: SqlConnection, OleDbConnection, OdbcConnection, OracleConnection.
Ecco un esempio di creazione di oggetti di tipo Connection:
Per aprire e chiudere una connessione è sufficiente chiamare i metodi Open e Close.
E' possibile utilizzare gli eventi della connessione per ottenere informazioni dal database. L'evento StateChangedEvent è sollevato quando lo stato corrente del database cambia da aperto a chiuso. L'evento InfoMessage viene sollevato quando il server vuole notificare warning o messaggi.
Pool delle connessioni
Per ridurre l'overhead della creazione e distruzione di connessioni è importante utilizzare il pool delle connessioni. Il pool delle connessioni è attivato di default quando vengono creati oggetti connessione di ADO.NET. Per disattivare il pooling basta impostare a false la proprietà Pooling.
Di default l'oggetto SqlConnection automaticamente utilizza il connection pooling. E' possibile aggiungere delle parole chiave all'interno della stringa di connessione per controllarne il comportamento.
E' possibile utilizzare in particolare:
- "Connection Lifetime": la connessione sarà distrutta dopo un certo numero di secondi qui impostati
- "Max Pool Size": il numero massimo di connessioni permesse nel pool per la specifica stringa di connessione
- "Min Pool Size": il numero minimo di connessioni permesse nel pool
- "Pooling": per attivare o meno il connection pooling
Proprietà analoghe sono inseribili nelle stringhe di connessione per Oracle.
Con OLE DB è possibile controllare l'uso del pooling aggiungendo la parola chiave services alla stringa di connessione.
E' possibile utilizzare:
- "OLE DB Services = -1": tutti i servizi sono attivi
- "OLE DB Services = -4": tutti i servizi attivi eccetto il Pooling e AutoEnlistment di transazionie
- "OLE DB Services = -5": tutti i servizi attivi eccetto Client Cursor
- "OLE DB Services = -8": tutti i servizi attivi eccetto Pooling, AutoEnlistment e Client Cursor.
- "OLE DB Services = 0": nessun servizio attivo
Con ODBC per attivare o disattivare il pooling si deve utilizzare la finestra di dialogo "ODBC Data Source Administrator" in Windows.
Gestione delle eccezioni
Quando si vuole eseguire una query su un server di database è estremamente importante gestire in maniera opportuna le eccezioni che potrebbero essere sollevate.
La collection Errors in un oggetto di tipo SqlException contiene tutti gli errori forniti dal dbms.
Enumerare le istanze di SQL Server disponibili su una rete
Per ottenere la lista dei SQL Server disponibili si utilizza la proprietà Instance della classe SqlDataSourceEnumerator per poi chiamare il metodo GetDataSources. Questo metodo restituisce una DataTable che contiene varie informazioni accessibili tramite le colonne "ServerName", "Instance Name", "IsClustered", "Version".
Proteggere l'accesso alle stringhe di connessione
Memorizzare informazioni sensibili con testo in chiaro non è consigliato per ovvi motivi di sicurezza.
Generalmente le informazioni relative alla stringa di connessione al database vengono memorizzate nel file di configurazione dell'applicazione (app.config):
Il metodo utilizzato per rendere più sicuro il file di configurazione è cifrare le sezioni che contengono informazioni sensibili.
Ecco lo spezzone di codice necessario per cifrare il contenuto della sezione connectionStrings all'interno del file di configurazione:
e quello per decifrarne il contenuto: