In questo articolo tratteremo come effettuare una connessione al database Microsoft Sql Server in c# mediante l’architettura ADO.NET.

ADO.NET (Active Data Objects .NET) รจ il nome con il quale si indicano lโ€™insieme di strumenti creati da Microsoft per
consentire ad una Applicazione Windows (o a una Applicazione Web) di accedere ai dati presenti in un DataBase SQL Server.

Per accedere ai dati di un DataBase, lโ€™Architettura ADO.NET offerta da MicroSoft, occorre includere i due NameSpace (ossia due โ€œlibrerieโ€ di
classi) chiamati System.Data e System.Data.SqlClient per poter utilizzare ADO.NET:


using System.Data;
using System.Data.SqlClient
;

A questo punto si possono utilizzare i seguenti oggetti:

1) La Connection che stabilisce una connessione fra lโ€™Applicazione e il DataBase sul Server.

2) Il DataAdapter che specifica il comando SQL per recuperare i dati desiderati dal DataBase. (Il DataAdapter rende disponibile il metodo FILL che: โ€ฆ invia il comando SQL al Server; โ€ฆ il Server esegue il comando,
genera i dati richiesti e li trasmette al DataAdapter; โ€ฆ infine, il DataAdapter memorizza i dati ottenuti nel DataTable.)

3) Il DataTable che immagazzina i dati recuperati dal DataBase e li rende accessibili โ€œin RAMโ€ allโ€™Applicazione. (Se lโ€™Applicazione modifica i dati nel DataTable, tali modifiche possono facilmente essere โ€œscaricateโ€ sul Server
utilizzando il metodo UPDATE del DataAdapter.)

4) La classe SqlConnection รจ la classe specificata per stabilire connessioni con DataBase gestiti su Server con MS SQL Server:


SqlConnection cn = new SqlConnection(
“server=ยซNOME SERVERยป\\ยซNOME ISTANZA DB MSSQLยป;database=ยซNOME DBยป;user id=ยซUSER DBยป;password=ยซPASSWORD USER DBยป” );

Note: \\ โ€œdoppia back-slashโ€ ( \\), viene interpretata da C# come unโ€™unica back-slash ( \ ). La Connessione con il Server viene automaticamente โ€œapertaโ€ solo al momento dellโ€™esecuzione del metodo FILL (o del
metodo UPDATE) del DataAdapter e, terminate le azioni previste dal FILL (o UPDATE), viene automaticamente chiusa.
La Creazione di un Oggetto di classe SqlConnection รจ necessaria prima di poter utilizzare le altre classi ADO.NET.

La classe SqlDataAdapter e il Comando SQL di tipo SELECT

La classe SqlDataAdapter รจ la classe specifica per inviare Comandi SQL di Selezione a DB gestiti su Server con MS
SQL Server e gestire le Tabelle di Dati restituite dal Server stesso.
SqlDataAdapter esige un Comando SQL di tipo SELECT, che consente di โ€œselezionareโ€ (ossia scegliere) quali dati si
desidera ottenere, da quali tabelle del DB, in che ordine, con quale โ€œfiltroโ€, eccetera.


SqlDataAdapter daTB= new SqlDataAdapter(“SELECT * FROM ยซNOME TABELLA DBยป”, cn);

Note: Questa istruzione crea lโ€™oggetto daTB di classe SqlDataAdapter e lo prepara per inviare al Server, il Comando SQL di selezione
SELECT * FROM ยซNOME TABELLAยป, sfruttando la connessione cn definita nellโ€™istruzione precedente.

Lโ€™invio del Comando SQL al Server avviene solo quando si esegue il metodo FILL dellโ€™oggetto DataAdapter.

La classe DataTable e il metodo FILL del DataAdapter

La classe DataTable, come giร  studiato in precedenza, consente di memorizzare e gestire in RAM dati in forma
tabellare, specificando nome e caratteristiche dei campi (insieme Columns) e permettendo un accesso diretto ai record
tramite un indice (insieme Rows).


DataTable dt = new DataTable();

La classe SqlDataAdapter dispone del metodo FILL che, quando eseguito provoca le seguenti azioni:

1) il DataAdapter apre la Connessione con il Server e invia ad esso il Comando SQL di tipo SELECT.

2) Il motore di MS SQL Server riceve ed esegue il Comando SQL sul DataBase, generando la Tabella di Dati richiesta.

3) Il motore di MS SQL Server invia al Client la Tabella di Dati generata dal Comando SQL.

4) Il DataAdapter memorizza la Tabella di Dati ricevuta allโ€™interno di un oggetto di classe DataTable.

Il metodo FILL necessita, come parametro, dellโ€™oggetto DataTable in cui memorizzare la tabella restituita dal Server:


DaTB.Fill (dt);

Note: La Struttura del DataTable, ossia la definizione delle sue Colonne (Insieme Columns) viene automaticamente creata
dal DataAdapter in base alla Tabella di Dati proveniente dal Server.
Anche lโ€™Insieme Rows del DataTable viene automaticamente riempito dal DataAdapter con tutti i record presenti nella
Tabella di Dati proveniente dal Server.

Accedere o Modificare i Record in un oggetto DataTable

Per Accedere ad uno specifico Record di un DataTable, si utilizza lโ€™insieme Rows, indicando lโ€™Indice del Record desiderato:


ยซDataTableยป.Rows[ยซIndice (riga da cui tirare fuori i dati)ยป].Item[ยซNome Campoยป];
o nella forma abbreviata, che omette โ€œ.Itemโ€:
ยซDataTableยป.Rows[ยซIndice (riga da cui tirare fuori i dati)ยป][ยซNome Campoยป];


Note: Il valore dell’Indice parte con il valore 0. (Quindi se nella DataTable ci sono 4 righe occorre costruire un ciclo che parta da 0 ed arrivi fino a 3). Lโ€™accesso ad un campo puรฒ avvenire, ovviamente, sia in lettura che in scrittura. il campo puรฒ essere usato come una
variabile: puรฒ essere โ€œlettoโ€, per utilizzare il suo valore, oppure vi si puรฒ โ€œassegnareโ€ un dato, modificandone il valore.

Es: ad esempio, per visualizzare in un MessageBox il valore di una certa colonna in una posizione di record (esempio alla riga 2), si dovrร  scrivere:

MessageBox.Show( dt.Rows[2].Item[โ€œยซNome del Campoยปโ€] ) oppure MessageBox.Show ( dt.Rows[2][โ€œยซNome del Campoยปโ€] )

Per modificare il valore contenuto in un campo registrato come da esempio nella seconda riga con un nuovo valore, si dovrร  scrivere:

dt.Rows[2].Item[โ€œยซNome del Campoยปโ€] = โ€œยซnuovo valore da attribuireยปโ€ oppure dt.Rows[2][โ€œยซNome del Campoยปโ€] = โ€œยซnuovo valore da attribuireยปโ€


Query Parametriche (comandi SELECT con uso di Parametri)

La maggior parte delle volte, un comando Sql di tipo SELECT, deve essere eseguito in base ad uno o piรน Parametri.

In tal caso, la tecnica corretta per impostare il comando Sql nel DataAdapter, prevede di indicare esplicitamente il
parametro tramite una โ€œvariabile sqlโ€, caratterizzata dalla notazione:

@ยซidentificatoreยป

Quindi la query da scrivere nel SqlDataAdapter รจ:


SqlDataAdapter daTB = new SqlDataAdapter (
โ€œSELECT * FROM ยซNome Tabellaยป WHERE ยซNome Campoยป = @ยซidentificatoreยปโ€, cn);

Oltre a indicare esplicitamente il Parametro nel comando Sql, รจ necessario informare il DataAdapter dellโ€™esistenza
del parametro stesso, specificandone Identificatore, Tipo ed eventualmente, Dimensione:


daTB.SelectCommand.Parameters.Add (
โ€œidentificatoreโ€, SqlDbType.ยซTipo di Dato SQLยป,ยซDimensioneยป );


Note: Come si vede, รจ necessario accedere allโ€™oggetto โ€œinternoโ€ SelectCommand e, quindi, al suo insieme โ€œinternoโ€ Parameters, al quale si aggiunge (metodo Add) la definizione del nuovo parametro.
Si noti come SqlDbType รจ una enumerazione che, dopo aver digitato il punto, elenca automaticamente tutti i possibili tipi disponibili in MS Sql Server.

Infine, per Attribuire un Valore al Parametro, si accede al parametro appena definito nellโ€™insieme Parameters e si imposta la sua proprietร  Value:


daTB.SelectCommand.Parameters[โ€œ@ยซidentificatoreยปโ€].Value = ยซValore da assegnare (puรฒ essere anche il testo contenuto in un campo)ยป;


A questo punto รจ possibile richiamare il metodo Fill del DataAdapter che invierร  al Server Sql il comando SELECT e la definizione del Parametro: il Server eseguirร  la query โ€œsostituendoโ€ al parametro il valore specificato.

Note: E’ utile adoperare i parametri perchรจ non si incorre in problematiche di errore con i tipi di valore stringhe. Cosรฌ facendo, infatti, un dato โ€œesternoโ€ (il valore del parametro) viene a costituire parte integrante del comando sql, diventando cosรฌ โ€œeseguibileโ€ ed esponendo la query al cosiddetto SQL INJECTION (questa โ€œdebolezzaโ€ consente a un malintenzionato di inserire, nella
query, parte di comandi indesiderati e malevoli, semplicemente specificando valori particolari per il parametro).


DataTable dt = new DataTable();
daTB.Fill (dt);



2 risposte a “Connessione al database Microsoft Sql Server in c#”

  1. Avatar Elio
    Elio

    Davvero ben chiaro il procedimento. Grazie

    1. Avatar cardamone_c

      Grazie per il commento…

Lascia un commento

Il tuo indirizzo email non sarร  pubblicato. I campi obbligatori sono contrassegnati *