Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ ADO.NET - Connessione ad una sorgente dati Per comunicare con una sorgente dati ed eseguire i comandi di lettura e aggiornamento è necessario stabilire una connessione con essa. Ciascun data provider implementa implementa la classe astratta DbConnection. I metodi principali delle classi che implementano DbConnection (come SqlConnection) sono Open e Close (le connessioni vanno sempre chiuse), mentre ConnectionString è la proprietà per la stringa di connessione che può anche essere valorizzata in fase di creazione dell’istanza passando tale stringa al costruttore. Esempio di creazione e gestione della connessione verso un DB SQLServer string connStr = "Data Source=PORTATILEHP\\SQLEXPRESS;Initial Catalog=AdventureWorks; Integrated Security=True; providerName=\"Microsoft SQL Server\""; SqlConnection conn = new SqlConnection(connStr); try { ... conn.Open(); ... } catch (SqlException ex){ // Gestione dell’eccezione } finally { // Chiusura della connessione if (conn.State == ConnectionState.Open) conn.Close(); } Dal momento che la classe DbConnection implementa l’interfaccia IDisposable è possibile usare il costrutto using che chiude in modo implicito la connessione sia in caso di successo che in caso di errore, per cui il codice di cui sopra potrà essere scritto come: page 1 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ ... using(SqlConnection conn = new SqlConnection(connStr)) { try { ... conn.Open(); ... } catch (SqlException ex){ // Gestione dell’eccezione } La stringa di connessione E’ composta da una serie di coppie key=valore separate da ; . Le principali key sono le seguenti: - Data source (equivalente a Server). Specifica il percorso dove risiede la sorgente dati - Database (equivalente a Initial Catalog). Identifica il database predefinito - User ID (equivalente a Uid). Identifica il nome utente (per accessi con autenticazione) - Password (equivalente a Pwd). Identifica la password (per accessi con autenticazione) - Integrated Security (equivalente aTrusted_Connection). Permette di abilitare l’autenticazione Windows (cioè Integrata). In questo caso le credenziali possono essere omesse (sono riconosciute dal dominio) - Provider. Specifica il provider OLE DB da utilizzare - Driver. Specifica il driver ODBC da utilizzare Alcuni esempi: Excel via ODBC Excel via OLEDB Access OLEDB MySQL (Conn./NET) MYSQL (OLEDB) “Driver ={Microsoft Excel Driver (*.xls)}; DBQ=C:\\Data.xls;” "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= C:\\Data.xls; "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= C:\\Data.mdb; "Server=localhost; Port=3306; Database=Northwind; Uid=User; Pwd=Pass;” "Provider=MySQLProv; Data Source=localhost; User ID=User; Password=Pass;” page 2 / 12 } Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ SQL ServExp "Server=.\\SQLExpress; Database=Northwind; page 3 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ (percorso assoluto) AttachDbFilename=C:\\Data\\Northwind.mdf; Trusted_Connection=Yes;” page 4 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ SQL ServExp (cartella AppData) page 5 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ "Server=.\\SQLExpress; AttachDbFilename=| Data Directory | Northwind.mdf; Database=Northwind; Trusted_Connection=Yes;” page 6 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ SQL Server Integrata) (aut. page 7 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ "Data Source=localhost; Integrated Security=true; Initial Catalog=Northwind;” page 8 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ SQL Server (aut. SQL Server) page 9 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ "Data Source=localhost; User=User; Password=Pass; Initial Catalog=Northwind;” L'autenticazione integrata rappresenta la modalità di connessione più sicura ed quindi da preferire. In ogni caso è buona norma utilizzare sempre utenti con permessi ristretti. Nel web.config esiste una sezione specifica in cui è possibile definire le stringhe di connessione (vedi sotto). Queste saranno accessibile via codice o in modo dichiarativo tramite ConfigurationManger.ConnectionStrings (possono essere protette tramite crittografia RSA o DPAPI. <configuration> <connectionStrings> <add name="SqlNorthwind" connectionString="Data Source=PORTATILEHP\SQLEXPRESS; page 10 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ Integrated Scurity=True; Initial Catalog=Northwind;" providerName="System.Data.SqlClient"/> <add name="MdbNorthwind" connectionString="~/App_Data/Northwind.mdb" providerName="System.Data.OleDb"/> </connectionStrings> </configuration> Per utilizzare ConfigurationManger.ConnectionStrings vedere l'esempio sotto string C_Str = ConfigurationManager.ConnectionStrings["SqlNorthwind"].ConnectionString; using(SqlConnection conn = new SqlConnection(C_Str)) { ... } page 11 / 12 Solo quello che ti interessa | ADO.NET - Connessione ad una sorgente dati Copyright admin [email protected] http://www.belloma.it/ado-net-connessione-ad-una-sorgente-dati/ La stringa di connessione può essere anche creata in modo programmatico. Per ogni provider esiste un implementazione della classe astratta DbConnectionStringBuilder che permette di assemblare la stringa di connessione. A ciascun parametro della stringa di connessione corrisponde un parametro del builder. Una volta valorizzati questi parametri, si accederà alla stringa di connessione così creata attraverso la proprietà ConnectionString. Questo metodo è utile nei casi in n cui si vuole dare all’utente la possibilità di scegliere il DB a cui connettersi. SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = ServerName; builder.InitialCatalog = Database; builder.IntegratedSecurity = true; SqlConnection conn = new SqlConnection(builder.ConnectionString); page 12 / 12