Architettura Aspnet Datareader Dataset

Iniziamo con questo capitolo una serie di approfondimenti per quanto riguarda il Aspenet , approfondendo alcune delle ultime tecnologie introdotte da Aspnet 3.5. Un DataSet è da considerarsi alla stregua di un piccolo Database Programmato,. Il Qulkae permette di compiere una sieri di operazioni sui dati in elaborazione.. Le tabele appartenenti a un Dataset possono essere messe in relazione anche tra di loro con dei collegamenti definiti relazioni.

Cosa sono i DataSet di Aspnet e come si creano

Le istruzioni per la creazione di un Data Set sono

System.Data.DataSet DS_01 = new DataSet ("Primo DataSet");

mentre per creare un database contenente per esempio nomi utenti e cognomi di dipendenti si fa

 

DataTable DT_01 = new DataTable ("Utenti");

DS_01.Tables.Add(DT_01);

vediamo adesso invece come popolare i campi della tabella

 

//Contatore Campo ID

DataColumn DC_ID =

new System.Data.DataColumn ("ID", typeof (int));

DC_ID.AutoIncrement = true;

DC_ID.AllowDBnull = false;

//Nome Utente

DataColumn DC_NOME = new System.Data.

DataColumn("Nome", typeof(string);

DC_ID.AllowDBNull=false;

DT_01.Columns.Add(DC_NOME);

 

//Cognome Utente

DataColumn DC_COGNOME = new System.Data.

DataColumn("Cognome", typeof(string);

DC_ID.AllowDBNull=false;

DT_01.Columns.Add(DC_COGNOME);

Come si vede abbiamo definito la prima colonna autoincrementante con il campo id, questa vuol dire che ogni qual volta si inserisce un valore questo finisce per incrementare a sua volta quel determinato campo da solo.

Da notare anche che al termine di ogni colonna abbiamo inserito la voce

DT_01.Columns.Add(<nomecolonna>);

Le tabelle del database sono state create adesso occorre anche popolarle e questo lo facciamo ricorrendo ai DataRow nel seguente modo

DataRow u1 = new DataRow();

u1 = DT_01.NewRow();

E per aggiungere il primo utente faremo semplicemente

u1["Nome"] ="Alessio";

u1["Cognome"] = "Marziali"M

DT_01.Rows.Add(u1);

Supponiamo adesso di avere la necessità di avere due o piu’ tabelle e doverle mettere in qualche modo in collegamenteo fra di loro , in questo caso dovremo fare

DataTable DT_02 = new DataTable ("Jobs");

DS_02.Tables.Add(DT_02);

//introduciamo adesso il solito campo contatore

 

DataColumn D2_IDJOBS =

new System.Data.DataColumn ("IDJOBS", typeof (int));

D2_IDJOB..AutoIncrement = true;

D2_IDJOB.AllowDBnull = false;

DT_02.Column.Add(D2_IDJOB);

 

//CREIAMO ADESSO UNA TABELLA X UTENTE

DataColumn D2_Utente =

new .DataColumn ("Utente", typeof (int));

D2_Utente..AutoIncrement = true;

D2_Utente.AllowDBnull = false;

DT_02.Column.Add(D2_Utente);

 

//creiamo adesso anche unacampo desrizione

DataColumn D2_Desc =

new System.Data.DataColumn ("Desc", typeof (int));;

D2_Desc.AllowDBnull = false;

DT_02.Column.Add(D2_Desc);

// E adesso vediamo come si crea il primo oggetto DataRow, ossia il primo elemento che mettiamo nel database virtuale ossia nel nostro DataSet

DataRow j1 = new DataRow();

j1["Utente"] =1;

j1["Desc"]="Capitolo Adonet";

DT_02.Row.Add(j1);

//A questo punto vediamo come si possa creare una relazione a livello Dataset fra le colonne ID di //DT_01 e Utente di DT_02

Quindi si utlizzera un oggetto chiamato DataRelation che sarà cosi’ cotruito

DataRelation dRel1 = new DataRelation ("UtentiJobs", DT_01.Columns["ID"], DT_02.Columns["Utente"]);

DS_01.Relations.Add(dRel1);

Il database virtuale è cosi creato , e quello che abbiamo fatto è abbastanza immediato, abbiamo prima costruito la relazione e dopo l’abbiamo messa in comunicazione fra di se.

Vediamo adesso come implementare un DataSet con i dati provenienti da na tabella residente in un database.

Per fare questo supponiamo di essere in possesso di un database gia’ formato chiamato db.mdb e posizionato dentro la cartella site , quindi avremo

 

OleDbConnection mdbConnection = new OleDbConnection ( "Provider = Microsoft.Jet.OleDB.40; DataSource = C:\\site\db.mdb");

// queste operazione si occuperanno di stabilire se è meno possibile di effettuare il collegamento con il nostro database.

try

{

mdbConnection.Open();


}

catch (Exception Ex)

{

Response.Write ("Impossibile aprire una connessione con il Database ");


}

 

// Adesso preleviamo i dati contenuti

OleDbDataAdapter _cmd = new OleDbDataAdapeter ("Select * From Utenti", mdbConnection);

//Creiamo un oggetto Dataset

DataSet ds = new DataSet();

//Non ci rimane che riempire il nostro dataset con i dati provenienti dal database

_cmd.Fill(ds, "Utenti");

// e chiudere la connessione, per la verità dovrebbe essere un'operazione che compie da solo, ma una precauzione in piu' non basta mai.

if (mdConnection.State != System.Data.ConnectionState.Closed)

{

mdbConnection.Close();


}

Queste sono le operazioni da compiere, non ci soffermiamo piu’ di tanto sulle classi da dove provengono e le sottoclassi perche’ entreremo in un tecnicismo abbastanza incomprensibile e abbastanza inutile dato che queste operazioni cambiando poi i nomi normalmente si fanno quasi con dei copia incolla, insomma sono standard.

Facciamo notare solamente la creazione dell’oggetto OleDbDataAdaper, il quale altro non è che un canale di comunicazione di dati , attraverso il quale s’inolta il comando TSQL alla connessione che sta puntando all’applicazione stessa.

I DataReader spiegazione in Aspnet

Architettura Aspnet Datareader Dataset

Ora che abbiamo visto i DataSet passiamo a descrivervi i DataReader

Un DataReader si qualifica in uno stream di recordi di tipo forward only, il quale pemette la lettura di un singolo record per vola. Questa tecnica di connessione si dice “Connessa”, in quanto durante la lettura con un oggetto DataReader, la connessione a essa associata resta occupata.

E’ sicuramente uno strumento affidabile, l’oggetto DataReader non tiene in memoria alcun tipo di valore, ne durante la lettura e tantomeno l’inizio di parametri di putput.

vediamo come funziona nello specifico.

 

OleDbConnection mdbConnection = new OleDbConnection ("Provider = Microsoft.Jet.OleDb.4.0; Data Source = C:\\site\db.mdb");

//si ricontrolla il buon andamento della connessione.

try {
mdbConnection.Open();


}

catch (Exception Ex)

{


Response.Write( "Impossibile Aprire una connessione con il database");
}

OleDbCommand _OleCmd = new OleDbCommand ( "Select * from Utenti", mdbConnection);

System.Data.OleDb.OleDbDataReader dr = _OleCmd.ExecuteReader();

//se il risultato della query contiene dei valori

 

if (dr.HasRows)

{


while (dr.Read())

{


Response.Write ("utente "+ dr["Nome"] + " " + dr["Cognome"] + "<br>") ;
}


}

 

//Come sempre a questo punto si chiude la connessione

 

if (mdConnection.State != System.Data.ConnectionState.Closed)

{


mdbConnection.Close();
}

Vi vogliamo fare soppesare l’attenzione su un comando che abbiamo introdotto in questa pagina ossia HasRow, per chi gia’ conoscesse da altri linguaggi EOF il problema è risolto, anche se MicroSoft lo spaccia come una novità tutta sua , in soldoni si tratta della stessa cosa. per gli altri si tratta semplicemente di una variabile che interagisce con il database ogni volta che si effettua la lettura di un record dal databasse e quando non sono presenti altri recordi viene caricata al valore booleano di false.

OleDbConnetcion mdbConnection = new OleDbConnection (" Provider = Microsoft.Jet.OleDB.4.0; Data Source = C:\\site\db.mdb");

// si controlla il buon esito dell'apertura del db

try

{

mdbConnection.Open();

}

 

catch (Exception Ex)

{

Response.Write ("Impossibile arpire una connessione con il database");

}

 

// E per la chiusura si ha

 

if (mdbConnection.State != System.Data.ConnectionState.Closed)

{

mdbConnection.Close();

}

Oggetto Command

L’oggetto Command viene utilizzato per spedire dei comandi di tipo TSQL (Quelli che abbiamo visto fino ad adesso ) al nostro database di riferimento e opera soltanto quando la variabile state che abbiamo incontrato nel nostro ultimo if ha il valore di true. Sono in pratica dei comandi che ci possono tornare utili nella nostra fase di analisi. L’oggetto Comamand nativamente implementa i seguenti 4 metodi

  • ExecuteNonQuery() numero di righe che sono coinvole nell’operazione
  • ExecuteScalar () primo valore della colonna prima di sinistra
  • ExecuteReader () viene utilizzato per compilare un oggetto di tipo Data Reader

CommandBehavior

Questi CommandBehavior forniscono dei risultati della query e dei relativi effetti sul database in cui vengonol lanciati i comandi SQL