La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l.

Presentazioni simili


Presentazione sul tema: "ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l."— Transcript della presentazione:

1 ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. http://blogs.ugidotnet.org/pape Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l. http://blogs.ugidotnet.org/pape

2 SponsorSponsor

3 Struttura di ADO.NET ADO.NET è composto da: –Namespace System.Data: racchiude le primitive indipendenti dalla tipologia di base dati. Sono tutte disconnesseSono tutte disconnesse –.NET Managed Provider: implementano le primitive necessarie all’accesso a specifiche basi dati System.Data.SqlClient per l’accesso a SQL Server 7+System.Data.SqlClient per l’accesso a SQL Server 7+ System.Data.OleDb per connettersi usando un OleDb ProviderSystem.Data.OleDb per connettersi usando un OleDb Provider System.Data.OracleClientSystem.Data.OracleClient System.Data.OdbcSystem.Data.Odbc ADO.NET è composto da: –Namespace System.Data: racchiude le primitive indipendenti dalla tipologia di base dati. Sono tutte disconnesseSono tutte disconnesse –.NET Managed Provider: implementano le primitive necessarie all’accesso a specifiche basi dati System.Data.SqlClient per l’accesso a SQL Server 7+System.Data.SqlClient per l’accesso a SQL Server 7+ System.Data.OleDb per connettersi usando un OleDb ProviderSystem.Data.OleDb per connettersi usando un OleDb Provider System.Data.OracleClientSystem.Data.OracleClient System.Data.OdbcSystem.Data.Odbc

4 .NET Data Providers.NET Data Providers Implementano un insieme comune di interfacce esponendo le classi: –Connection: permette la connessione ad una base dati –Command: permette l’esecuzione di comandi SQL e Stored Procedure –DataReader: implementa un cursore forward- only, read-only, client side –DataAdapter: permette di “riempire” un contenitore disconnesso Implementano un insieme comune di interfacce esponendo le classi: –Connection: permette la connessione ad una base dati –Command: permette l’esecuzione di comandi SQL e Stored Procedure –DataReader: implementa un cursore forward- only, read-only, client side –DataAdapter: permette di “riempire” un contenitore disconnesso

5 Classe Connection Simile ad ADO old-style La Connection String: –Può essere specificata mediante un costruttore parametrico –Utilizza le stesse keyword di ADODB –Richiede attenzione nella specifica del Provider: SqlClient non lo accettaSqlClient non lo accetta System.Data.OleDb non supporta ODBCSystem.Data.OleDb non supporta ODBC Simile ad ADO old-style La Connection String: –Può essere specificata mediante un costruttore parametrico –Utilizza le stesse keyword di ADODB –Richiede attenzione nella specifica del Provider: SqlClient non lo accettaSqlClient non lo accetta System.Data.OleDb non supporta ODBCSystem.Data.OleDb non supporta ODBC Dim conSQL As New SqlConnection( ) conSQL.ConnectionString = "Integrated Security=True;" & _ "Data Source=LocalHost;Initial Catalog=Pubs;" conSQL.Open( ) Dim conSQL As New SqlConnection( ) conSQL.ConnectionString = "Integrated Security=True;" & _ "Data Source=LocalHost;Initial Catalog=Pubs;" conSQL.Open( )

6 Classe Command Possiamo creare un comando: –Mediante il costruttore –Mediante metodo CreateCommand Possiamo eseguire un comando mediante i metodi: –ExecuteReader: restituisce il DataReader in base ad una query –ExecuteScalar: è il metodo preferibile se il risultato è un singleton –ExecuteNonQuery: esegue un comando di azione Possiamo creare un comando: –Mediante il costruttore –Mediante metodo CreateCommand Possiamo eseguire un comando mediante i metodi: –ExecuteReader: restituisce il DataReader in base ad una query –ExecuteScalar: è il metodo preferibile se il risultato è un singleton –ExecuteNonQuery: esegue un comando di azione Dim commSQL As New SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText = "Select Count(*) from Authors" MessageBox.Show(commSQL.ExecuteScalar( ).ToString) Dim commSQL As New SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText = "Select Count(*) from Authors" MessageBox.Show(commSQL.ExecuteScalar( ).ToString)

7 Invocare Stored Procedure 1.Creare un oggetto Command 2.Impostare CommandType al valore StoredProcedure 3.Impostare la proprietà CommandText 4.Usare il metodo Add per creare e aggiungere parametri 5.Impostare la proprietà ParameterDirection 6.Invocare ExecuteReader 7.Consumare i record, e chiudere il DataReader 8.Leggere i parametri di output e il valore di ritorno 1.Creare un oggetto Command 2.Impostare CommandType al valore StoredProcedure 3.Impostare la proprietà CommandText 4.Usare il metodo Add per creare e aggiungere parametri 5.Impostare la proprietà ParameterDirection 6.Invocare ExecuteReader 7.Consumare i record, e chiudere il DataReader 8.Leggere i parametri di output e il valore di ritorno

8 Invocare Stored Procedure: un esempio

9 Usare un DataReader Per usare un DataReader, possiamo: –Avanzare alla posizione successiva mediante il metodo Read(), che ritorna True finchè non si sono consumati tutti i dati –Leggere i valori dei campi mediante la proprietà Item, oppure mediante i metodi GetXYZ() Un DataReader impegna la propria connessione, quindi: –Non è possibile utilizzarla per eseguire comandi –Dobbiamo ricordarci di chiuderlo mediante il metodo Close() Per usare un DataReader, possiamo: –Avanzare alla posizione successiva mediante il metodo Read(), che ritorna True finchè non si sono consumati tutti i dati –Leggere i valori dei campi mediante la proprietà Item, oppure mediante i metodi GetXYZ() Un DataReader impegna la propria connessione, quindi: –Non è possibile utilizzarla per eseguire comandi –Dobbiamo ricordarci di chiuderlo mediante il metodo Close()

10 Usare un DataReader: un esempio Dim commSQL As New SqlClient.SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText ="Select au_lname,au_fname from authors" Dim datRead As SqlClient.SqlDataReader datRead = commSQL.ExecuteReader( ) Do Until datRead.Read = False MessageBox.Show(datRead.GetString(1) & " " _ & datRead.GetString(0)) Loop datRead.Close( ) Dim commSQL As New SqlClient.SqlCommand( ) commSQL.Connection = conSQL commSQL.CommandText ="Select au_lname,au_fname from authors" Dim datRead As SqlClient.SqlDataReader datRead = commSQL.ExecuteReader( ) Do Until datRead.Read = False MessageBox.Show(datRead.GetString(1) & " " _ & datRead.GetString(0)) Loop datRead.Close( )

11 DataReaderDataReader

12 La classe DataSet E’ un contenitore disconnessoE’ un contenitore disconnesso E’ assimilabile ad un “vettore di matrici”E’ assimilabile ad un “vettore di matrici” Permette di specificare vincoli e relazioni tra i dati contenutiPermette di specificare vincoli e relazioni tra i dati contenuti E’ accessibile in scritturaE’ accessibile in scrittura Permette di propagare le modifiche su un DBPermette di propagare le modifiche su un DB Supporta nativamente la (de)serializzazione in formato XMLSupporta nativamente la (de)serializzazione in formato XML E’ un contenitore disconnessoE’ un contenitore disconnesso E’ assimilabile ad un “vettore di matrici”E’ assimilabile ad un “vettore di matrici” Permette di specificare vincoli e relazioni tra i dati contenutiPermette di specificare vincoli e relazioni tra i dati contenuti E’ accessibile in scritturaE’ accessibile in scrittura Permette di propagare le modifiche su un DBPermette di propagare le modifiche su un DB Supporta nativamente la (de)serializzazione in formato XMLSupporta nativamente la (de)serializzazione in formato XML

13 La classe DataSet ConstraintsConstraint ColumnsColumn DataSet TablesTable Oggetto Collezione RelationsRelation RowsRow

14 Popolare un DataSet Popolare un DataSet accedendo ad un RDBMSPopolare un DataSet accedendo ad un RDBMS Creare un DataSet in via programmaticaCreare un DataSet in via programmatica Popolare un DataSet accedendo ad un RDBMSPopolare un DataSet accedendo ad un RDBMS Creare un DataSet in via programmaticaCreare un DataSet in via programmatica Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As DataSet = New DataSet( ) adaptSQL.Fill(datPubs, "NewTable") Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As DataSet = New DataSet( ) adaptSQL.Fill(datPubs, "NewTable") Dim datPubs As New DataSet( ) Dim tblAuthors As DataTable = New DataTable("authors") tblAuthors.Columns.Add("AuthorID", System.Type.GetType _ ("System.Int32")) Dim datPubs As New DataSet( ) Dim tblAuthors As DataTable = New DataTable("authors") tblAuthors.Columns.Add("AuthorID", System.Type.GetType _ ("System.Int32"))

15 La classe DataAdapter E’ il collegamento tra il “mondo” connesso e quello disconnessoE’ il collegamento tra il “mondo” connesso e quello disconnesso Può “riempire” un dataSet avvalendosi di una connessione chiusaPuò “riempire” un dataSet avvalendosi di una connessione chiusa E’ il collegamento tra il “mondo” connesso e quello disconnessoE’ il collegamento tra il “mondo” connesso e quello disconnesso Può “riempire” un dataSet avvalendosi di una connessione chiusaPuò “riempire” un dataSet avvalendosi di una connessione chiusa Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As New DataSet( ) adaptSQL.Fill(datPubs, "miaTabella") ' Accesso ai dati adaptSQL.Update (datPubs, "miaTabella") Dim adaptSQL As New SqlClient.SqlDataAdapter( _ "Select * from authors", conSQL) Dim datPubs As New DataSet( ) adaptSQL.Fill(datPubs, "miaTabella") ' Accesso ai dati adaptSQL.Update (datPubs, "miaTabella")

16 DataSet multi Tabella Creare la prima tabellaCreare la prima tabella Creare le tabelle successiveCreare le tabelle successive Creare la prima tabellaCreare la prima tabella Creare le tabelle successiveCreare le tabelle successive Dim mySqlDataAdapter As New SqlDataAdapter(  "select * from customers", mySqlConnection) Dim myDataSet As New DataSet() mySqlDataAdapter.Fill(myDataSet, "Customers") Dim mySqlDataAdapter As New SqlDataAdapter(  "select * from customers", mySqlConnection) Dim myDataSet As New DataSet() mySqlDataAdapter.Fill(myDataSet, "Customers") mySqlDataAdapter.SelectCommand.CommandText =  "select * from orders" mySqlDataAdapter.Fill(myDataSet,"Orders") mySqlDataAdapter.SelectCommand.CommandText =  "select * from orders" mySqlDataAdapter.Fill(myDataSet,"Orders") Orders Customers DataSet: Data Tables

17 La classe DataTable Ogni elemento della proprietà Tables è una istanza della classe DataTable La classe DataTable espone le proprietà: –Columns: è una collezione di istanze di DataColumn –Rows: è una collezione di istanze della classe DataRow –Una istanza della classe DataRow: Mette a disposizione il contenuto delle proprie colonne mediante la proprietà ItemMette a disposizione il contenuto delle proprie colonne mediante la proprietà Item Ogni elemento della proprietà Tables è una istanza della classe DataTable La classe DataTable espone le proprietà: –Columns: è una collezione di istanze di DataColumn –Rows: è una collezione di istanze della classe DataRow –Una istanza della classe DataRow: Mette a disposizione il contenuto delle proprie colonne mediante la proprietà ItemMette a disposizione il contenuto delle proprie colonne mediante la proprietà Item

18 Usare una DataTable: un esempio Dim numeroRighe As Int32 = unaTabella.Rows.Count Dim indiceRiga As Int32 Dim unaRiga As DataRow For indiceRiga = 0 To numeroRighe - 1 unaRiga = unaTabella.Rows(indiceRiga) Dim nomeAutore As String = _ unaRiga.Item("au_fname").ToString() Next Dim numeroRighe As Int32 = unaTabella.Rows.Count Dim indiceRiga As Int32 Dim unaRiga As DataRow For indiceRiga = 0 To numeroRighe - 1 unaRiga = unaTabella.Rows(indiceRiga) Dim nomeAutore As String = _ unaRiga.Item("au_fname").ToString() Next

19 DataSetDataSet

20 DataSet: le Relazioni La classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelationLa classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelation Un oggetto DataRelation:Un oggetto DataRelation: –Definisce una associazione tra le colonne di differenti DataTable –definisce una associazione orientata alla navigazione sui dati –NON costituisce una constraint La classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelationLa classe DataSet espone la proprietà Relations, che è una collezione di istanze della classe DataRelation Un oggetto DataRelation:Un oggetto DataRelation: –Definisce una associazione tra le colonne di differenti DataTable –definisce una associazione orientata alla navigazione sui dati –NON costituisce una constraint

21 Usare le Relazioni con i DataSet Creare relazioniCreare relazioni Accedere ai dati associatiAccedere ai dati associati Creare relazioniCreare relazioni Accedere ai dati associatiAccedere ai dati associati Dim relPubsTitle As New DataRelation("PubsTitles", _ datPubs.Tables("Publishers").Columns("pub_id"), _ datPubs.Tables("Titles").Columns("pub_id")) datPubs.Relations.Add(relPubsTitle) Dim relPubsTitle As New DataRelation("PubsTitles", _ datPubs.Tables("Publishers").Columns("pub_id"), _ datPubs.Tables("Titles").Columns("pub_id")) datPubs.Relations.Add(relPubsTitle) Dim PubRow, TitleRow As DataRow, TitleRows( ) As DataRow PubRow = datPubs.Tables("Publishers").Rows(0) TitleRows = PubRow.GetChildRows("PubsTitles") Dim PubRow, TitleRow As DataRow, TitleRows( ) As DataRow PubRow = datPubs.Tables("Publishers").Rows(0) TitleRows = PubRow.GetChildRows("PubsTitles")

22 Usare Constraint Il supporto alle constraint della classe DataSet permette di: –Creare constraint Classe ForeignKeyConstraintsClasse ForeignKeyConstraints Classe UniqueConstraintsClasse UniqueConstraints –Usare le constraint esistenti nel DB Il supporto alle constraint della classe DataSet permette di: –Creare constraint Classe ForeignKeyConstraintsClasse ForeignKeyConstraints Classe UniqueConstraintsClasse UniqueConstraints –Usare le constraint esistenti nel DB adaptSQL = New SqlClient.SqlDataAdapter("Select title_id" _ & ", title, type, price from titles", conSQL) adaptSQL.FillSchema(datPubs, schematype.Source, "Titles") adaptSQL.Fill(datPubs, "Titles") 'Operazioni sui dati adaptSQL.Fill(datPubs, "Titles") adaptSQL = New SqlClient.SqlDataAdapter("Select title_id" _ & ", title, type, price from titles", conSQL) adaptSQL.FillSchema(datPubs, schematype.Source, "Titles") adaptSQL.Fill(datPubs, "Titles") 'Operazioni sui dati adaptSQL.Fill(datPubs, "Titles")

23 Integrità Referenziale Una constraint ForeignKeyConstraint: –permette l’integrità referenziale Se la proprietà EnforceConstraints del DataSet è impostata a TrueSe la proprietà EnforceConstraints del DataSet è impostata a True –Determina le azioni effettuate nelle tabelle correlate Proprietà DeleteRule e UpdateRuleProprietà DeleteRule e UpdateRule Una constraint ForeignKeyConstraint: –permette l’integrità referenziale Se la proprietà EnforceConstraints del DataSet è impostata a TrueSe la proprietà EnforceConstraints del DataSet è impostata a True –Determina le azioni effettuate nelle tabelle correlate Proprietà DeleteRule e UpdateRuleProprietà DeleteRule e UpdateRuleAzioneAzioneDescrizioneDescrizione Cascade Cancella o aggiorna le righe correlate. E’ il default. SetNull Imposta a DBNull il valore delle righe correlate. SetDefault Imposta al DefaultValue il valore delle righe correlate. None Nessuna azione/modifica, viene sollevata una eccezione.

24 DataRelationDataRelation

25 Modificare i Dati Aggiungere righeAggiungere righe Modificare righeModificare righe Cancellare righeCancellare righe Aggiungere righeAggiungere righe Modificare righeModificare righe Cancellare righeCancellare righe Dim drNewRow As DataRow = datPubs.Tables("Titles").NewRow 'Populate columns datPubs.Tables("Titles").Rows.Add(drNewRow) Dim drNewRow As DataRow = datPubs.Tables("Titles").NewRow 'Populate columns datPubs.Tables("Titles").Rows.Add(drNewRow) drChangeRow.BeginEdit( ) drChangeRow("Title") = drChangeRow("Title").ToString & " 1" drChangeRow.EndEdit( ) drChangeRow.BeginEdit( ) drChangeRow("Title") = drChangeRow("Title").ToString & " 1" drChangeRow.EndEdit( ) datPubs.Tables("Titles").Rows.Remove(drDelRow)

26 Aggiornare il database Possiamo ripercuotere le modifiche effettuate al DataSet sul DB:Possiamo ripercuotere le modifiche effettuate al DataSet sul DB: –Esplicitando il comando di aggiornamento Generando automaticamente il comando di updateGenerando automaticamente il comando di update Possiamo ripercuotere le modifiche effettuate al DataSet sul DB:Possiamo ripercuotere le modifiche effettuate al DataSet sul DB: –Esplicitando il comando di aggiornamento Generando automaticamente il comando di updateGenerando automaticamente il comando di update Dim comm As New SqlClient.SqlCommand("Insert titles" & _ "(title_id, title, type) values(@t_id,@title,@type)") comm.Parameters.Add("@t_id",SqlDbType.VarChar,6,"title_id") comm.Parameters.Add("@title",SqlDbType.VarChar,80,"title") comm.Parameters.Add("@type",SqlDbType.Char,12,"type") adaptSQL.InsertCommand = comm adaptSQL.Update(datPubs, "titles") Dim comm As New SqlClient.SqlCommand("Insert titles" & _ "(title_id, title, type) values(@t_id,@title,@type)") comm.Parameters.Add("@t_id",SqlDbType.VarChar,6,"title_id") comm.Parameters.Add("@title",SqlDbType.VarChar,80,"title") comm.Parameters.Add("@type",SqlDbType.Char,12,"type") adaptSQL.InsertCommand = comm adaptSQL.Update(datPubs, "titles") Dim sqlCommBuild As New SqlCommandBuilder(adaptSQL) MsgBox(sqlCommBuild.GetInsertCommand.CommandText) adaptSQL.Update(datPubs, "titles") Dim sqlCommBuild As New SqlCommandBuilder(adaptSQL) MsgBox(sqlCommBuild.GetInsertCommand.CommandText) adaptSQL.Update(datPubs, "titles")

27 LinksLinks http://www.ugidotnet.org http://forum.ugidotnet.org http://mobile.ugidotnet.org http://www.ugidotnet.org http://forum.ugidotnet.org http://mobile.ugidotnet.org


Scaricare ppt "ADO.NET Primer Andrea Saltarello Software Architect – Software Architect – Managed Designs S.r.l.Managed Designs S.r.l."

Presentazioni simili


Annunci Google