Come ciclare una tabella di Sql Server utilizzando gli oggetti SqlDataAdapter e DataSet .
Prima cosa da fare è utilizzare una stringa di connessione valida ecco un esempio preso da un generico web.config:
<connectionStrings>
Per estrarre dal web.config la stringa di connessione denominata ConnSqlServer, utilizziamo l’oggetto del namespace Configuration, ConfigurationManager, l’array ConnectionStrings, il quale contiene tutte le stringhe di connessione inserite all’interno del web.config.
Utilizzare questo metodo ci permette di creare un codice pulito e mantenibile.
Una volta ottenuta la stringa di connessione utilizziamo il SqlDataAdapter che automaticamente apre la connessione al Server.
string connstring = ConfigurationManager.ConnectionStrings["ConnSqlServer"].ToString();
SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
Affinché DataSet generico e database vero e proprio possano comunicare viene usato appunto l’oggetto SqlDataAdapter, il quale si occupa di riempire ed aggiornare i DataSet, possiamo immaginare il SqlDataAdapter come la classe che chiede le query al Server, e poi procede a riempire il DataSet.
Vediamo le modalità con cui questo procedimento avviene.
SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
In questo modo viene automaticamente fatta la connessione al Server, passando il comando di selezione da utilizzare per il recupero dei dati.
A questo punto il passo successivo ovvio è quello di istanziare un oggetto di tipo DataSet:
DataSet Ds = new DataSet();
Un DataSet è un oggetto particolare, immaginiamolo come un array particolare che contiene tutti i dati che il SqlDataAdapter ha passato, questi dati solitamente sono inseriti in un altro oggetto che rappresenta la mappatura con i dati stessi, tale oggetto è il DataTable.
Solitamente un DataSet può gestire più DataTable, ragion per cui, il DataSet contiene un array di DataTable, chiamato DataTables.
Per cui per utilizzare ciascuna DataTable utilizziamo gli indici numeri o alfanumerici.
Per riempire il DataSet utilizziamo il comando Fill che è un metodo del SqlDataAdapter, che riempie il DataSet stesso:
Sa.Fill(Ds,"TblExample");
Utilizzando il comando sopra, viene riempita una DataTable che viene chiamata in memoria TblExample; se non viene specificato alcun nome, il DataTable viene mappato utilizzando il nome “Table”.
Possiamo accedere al DataTable name utilizzando un semplice comando :
string DataTableName = Ds.Tables[0].TableName;
Di conseguenza se abbiamo usato questa sintassi: Sa.Fill(Ds,"Category"); , per poter fare riferimento a questa DataTable dobbiamo usare questa sintassi:
Ds.Tables["Category"];
Ogni DataTable contiene un array di righe chiamato Rows.
foreach (DataRow Dr in Ds.Tables["Category"].Rows)
{
Response.Write(Dr["Description"].ToString () );
}
In questo caso utilizziamo foreach che cicla tutte le DataRow contenute nel DataTable del DataSet Ds.
Per accedere al valore di un campo è molto semplice basta utilizzare il nome colonna come indice: Dr["Description"].ToString () .
PROCEDURA PER AGGIORNARE I DATI VERSO SQL SERVER
In questo caso dobbiamo capire come il DataSet potrà essere rimandato al server per effettuare gli aggiornamenti.
Nel precedente codice abbiamo visto che il DataRow è accessibile in modalità lettura; ora vedremo che possiamo fare la stessa cosa per aggiornare anche le righe:
Dr["Description"] = "TestUpdate";
Con questa istruzione aggiorno il DataSet in quella riga e per quella colonna al valore "TestUpdate”
Il SqlDataAdapter è anche in grado di aggiornare i dati tramite particolari accorgimenti.
Dobbiamo utilizzare un nuovo oggetto il SqlCommandBuilder a cui dobbiamo passare il SqlDataAdapter.
Il SqlDataAdapter per aggiornare necessita di sapere l’UpdateCommand
Ecco come lo passiamo utilizzando proprio l’oggetto SqlCommandBuilder:
Nel codice sopra richiediamo al SqlCommandBuilder di passare il codice necessario per aggiornare , GetUpdateCommand infatti permette al SqlDataAdapter di avere tutto il necessario per effettuare l’aggiornamento.
A questo punto al SqlDataAdapter possiamo passare il DataSet carico dei nuovi aggiornamenti;
Sa.Update(Ds, "Category");
A questo punto rivediamo tutto il codice per scorrere ed aggiornare le righe:
protected void LoadSettings()
{
try{
//Ric database dal web config
//Get from ConfigurationManager.ConnectionStrings , the array
string connstring = ConfigurationManager.ConnectionStrings["ConnSqlServer"].ToString();
SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
DataSet Ds = new DataSet();
Sa.Fill(Ds, "Category");
string DataTableName = Ds.Tables[0].TableName;
foreach (DataRow Dr in Ds.Tables["Category"].Rows)
{
Response.Write(Dr["Description"].ToString () );
Dr["Description"] = "TestUpdate";
}
SqlCommandBuilder Scb = new SqlCommandBuilder(Sa);
Sa.UpdateCommand = Scb.GetUpdateCommand();
Sa.Update(Ds, "TblExample");
}
catch (Exception e) { Response.Write(e.Message); }
}
Utilizziamo i seguenti namespaces:
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
Il namespace Configuration ci permette di accedere al web.config.
il namespace Data.SqlClient ci permette di utilizzare gli oggetti Sql Server per manipolare i dati.
Il namespace System.Data per utilizzare i DataSet ed oggetti correllati.
Prima cosa da fare è utilizzare una stringa di connessione valida ecco un esempio preso da un generico web.config:
<connectionStrings>
<add name="ConnSqlServer" connectionString="Data Source=PIERO-SEVEN;Initial Catalog=test1;User ID=sa;Password=test"/>
</connectionStrings>Per estrarre dal web.config la stringa di connessione denominata ConnSqlServer, utilizziamo l’oggetto del namespace Configuration, ConfigurationManager, l’array ConnectionStrings, il quale contiene tutte le stringhe di connessione inserite all’interno del web.config.
Utilizzare questo metodo ci permette di creare un codice pulito e mantenibile.
Una volta ottenuta la stringa di connessione utilizziamo il SqlDataAdapter che automaticamente apre la connessione al Server.
string connstring = ConfigurationManager.ConnectionStrings["ConnSqlServer"].ToString();
SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
Affinché DataSet generico e database vero e proprio possano comunicare viene usato appunto l’oggetto SqlDataAdapter, il quale si occupa di riempire ed aggiornare i DataSet, possiamo immaginare il SqlDataAdapter come la classe che chiede le query al Server, e poi procede a riempire il DataSet.
Vediamo le modalità con cui questo procedimento avviene.
SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
In questo modo viene automaticamente fatta la connessione al Server, passando il comando di selezione da utilizzare per il recupero dei dati.
A questo punto il passo successivo ovvio è quello di istanziare un oggetto di tipo DataSet:
DataSet Ds = new DataSet();
Un DataSet è un oggetto particolare, immaginiamolo come un array particolare che contiene tutti i dati che il SqlDataAdapter ha passato, questi dati solitamente sono inseriti in un altro oggetto che rappresenta la mappatura con i dati stessi, tale oggetto è il DataTable.
Solitamente un DataSet può gestire più DataTable, ragion per cui, il DataSet contiene un array di DataTable, chiamato DataTables.
Per cui per utilizzare ciascuna DataTable utilizziamo gli indici numeri o alfanumerici.
Per riempire il DataSet utilizziamo il comando Fill che è un metodo del SqlDataAdapter, che riempie il DataSet stesso:
Sa.Fill(Ds,"TblExample");
Utilizzando il comando sopra, viene riempita una DataTable che viene chiamata in memoria TblExample; se non viene specificato alcun nome, il DataTable viene mappato utilizzando il nome “Table”.
Possiamo accedere al DataTable name utilizzando un semplice comando :
string DataTableName = Ds.Tables[0].TableName;
Di conseguenza se abbiamo usato questa sintassi: Sa.Fill(Ds,"Category"); , per poter fare riferimento a questa DataTable dobbiamo usare questa sintassi:
Ds.Tables["Category"];
Ogni DataTable contiene un array di righe chiamato Rows.
foreach (DataRow Dr in Ds.Tables["Category"].Rows)
{
Response.Write(Dr["Description"].ToString () );
}
In questo caso utilizziamo foreach che cicla tutte le DataRow contenute nel DataTable del DataSet Ds.
Per accedere al valore di un campo è molto semplice basta utilizzare il nome colonna come indice: Dr["Description"].ToString () .
PROCEDURA PER AGGIORNARE I DATI VERSO SQL SERVER
In questo caso dobbiamo capire come il DataSet potrà essere rimandato al server per effettuare gli aggiornamenti.
Nel precedente codice abbiamo visto che il DataRow è accessibile in modalità lettura; ora vedremo che possiamo fare la stessa cosa per aggiornare anche le righe:
Dr["Description"] = "TestUpdate";
Con questa istruzione aggiorno il DataSet in quella riga e per quella colonna al valore "TestUpdate”
Il SqlDataAdapter è anche in grado di aggiornare i dati tramite particolari accorgimenti.
Dobbiamo utilizzare un nuovo oggetto il SqlCommandBuilder a cui dobbiamo passare il SqlDataAdapter.
Il SqlDataAdapter per aggiornare necessita di sapere l’UpdateCommand
Ecco come lo passiamo utilizzando proprio l’oggetto SqlCommandBuilder:
SqlCommandBuilder Scb = new SqlCommandBuilder(Sa);
Sa.UpdateCommand = Scb.GetUpdateCommand();Nel codice sopra richiediamo al SqlCommandBuilder di passare il codice necessario per aggiornare , GetUpdateCommand infatti permette al SqlDataAdapter di avere tutto il necessario per effettuare l’aggiornamento.
A questo punto al SqlDataAdapter possiamo passare il DataSet carico dei nuovi aggiornamenti;
Sa.Update(Ds, "Category");
A questo punto rivediamo tutto il codice per scorrere ed aggiornare le righe:
protected void LoadSettings()
{
try{
//Ric database dal web config
//Get from ConfigurationManager.ConnectionStrings , the array
string connstring = ConfigurationManager.ConnectionStrings["ConnSqlServer"].ToString();
SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
DataSet Ds = new DataSet();
Sa.Fill(Ds, "Category");
string DataTableName = Ds.Tables[0].TableName;
foreach (DataRow Dr in Ds.Tables["Category"].Rows)
{
Response.Write(Dr["Description"].ToString () );
Dr["Description"] = "TestUpdate";
}
SqlCommandBuilder Scb = new SqlCommandBuilder(Sa);
Sa.UpdateCommand = Scb.GetUpdateCommand();
Sa.Update(Ds, "TblExample");
}
catch (Exception e) { Response.Write(e.Message); }
}
Utilizziamo i seguenti namespaces:
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
Il namespace Configuration ci permette di accedere al web.config.
il namespace Data.SqlClient ci permette di utilizzare gli oggetti Sql Server per manipolare i dati.
Il namespace System.Data per utilizzare i DataSet ed oggetti correllati.
Nessun commento:
Posta un commento