1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati...

29
1 Titolo Presentazione / Data / Confidenziale / Elaborazio ne di ... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin

Transcript of 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati...

Page 1: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

1Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

ASP. Net Accesso ai dati

Elaborazione di Franco Grivet Chin

Page 2: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

2Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Approccio dichiarativo VS approccio programmatico

La tecnologia ASP.net ha proposto da subito (2.0) un approccio dichiarativo (trascinamento di oggetti sulla pagina asp.net) rispetto ad un approccio programmatico (codifica all’interno di una classe della connessione , esecuzione, etc.) e per questo ha predisposto un insieme di oggetti:

-Data source

-Data consumer

Tali oggetti nel corso delle varie versioni (2.0 4.0) sono stati migliorati e sono stati creati nuovi oggetti

Page 3: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

3Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controlli data source

La piattaforma asp.net mette a disposizione molti controlli data source per connettersi a varie sorgenti di dati:

Site Map Data Source (per accedere ad un file web.sitemap)

XmlDataSource (per accedere ad un file xml)

AccessDataSource (per accedere ad un database access)

SqlDataSource (per accedere ad un dabase Sql server o altri db relazionali quali Oracle , etc.)

Object Data Source (per accedere a una classe mappata su db)

LinqDataSource(NET Framework 3.5 per accedere a basi dati via tecnologia Linq)

Entity data source(NET Framework 4 per accedere ad un classe entità, Entity Framework)

I controlli data source rappresentano l’oggetto che permette la comunicazione tra la sorgente vera e propria (file, database , etc,) ed un consumatore di dati (gridview, DetailView, etc.)

Page 4: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

4Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controlli data source

Site Map Data Source (per accedere ad un file web.sitemap)

Permette di creare un oggetto data source che legge un file sitemap.map che può poi essere utilizzato da “consumatori” come il menu, il treeview o il sitemappath (bread crumb)

XmlDataSource (per accedere ad un file xml)

Permette di leggere un file xml e di definire la regola di parsificazione, ad esempio la lettura di un rss

<asp:XmlDataSource ID="XmlDataSource1" runat="server"

DataFile="http://www.ilrisveglio-online.it/taxonomy/term/353/2/feed"

XPath="rss/channel/item" ></asp:XmlDataSource>

</div>

Page 5: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

5Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML Data Source e RSS

Molti dati vengono spesso esposti sotto forma di XML (Web service, RSS, etc).

Per poter accedere a questi dati si usa ovviamente un XML Data Source

Un documento RSS è un file XML che contiene un certo numero di elementi (item) che rappresentano notizie. Gli elementi <item> sono contenuti dal tag <channel> che, oltre ad essi contiene 3 elementi obbligatori <title>, <descriprion> e <link>. <channel><title><!-- Il titolo del canale --></title><description><!-- Una breve descrizione --></description><link><!-- la URL del canale --></link><!-- qui vanno altri elementi opzionali --><item><title><!-- titolo dell'elemento (della notizia) --></title><description><!-- una breve descrizione --></description><link><!-- la URL --></link></item></channel>

Esempio : http://www.consorzioformaweb.it/blog/feed

Page 6: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

6Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controlli data source

XmlDataSource

L’attributo XPath definisce la stringa di ricerca degli elementi a livello XML.

L’oggetto XPath conterrà poi i valori legati ad ogni nodo figlio, accessibile tramite la sintassi

<%#XPath(“nome elemento")%>

Ad esempio

<%#XPath("title")%>

Esempio di XML RSS

<rss><channel> <item> <title>Festa della Liberazione Martedì 24 e mercoledì 25</title> <link>http://www.ilrisveglio-online.it/appuntamenti/2012/04/19/festa-della-liberazione-marted%C3%AC-24-e-mercoled%C3%AC-25</link> <description>&lt;p&gt;La Comunità montana Valli di Lanzo, Ceronda e Casternone, la Città di Lanzo,

</description></item> …..

Page 7: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

7Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML Data Source e RSS

Il feed può contenere anche altri elementi come

<image>,

<item>,

<textinput>,

<language>,

<copyright>,

<managingEditor>,

<pubDate>

<category>.

Page 8: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

8Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML Data Source e RSS

Occorre poi definire all’interno del DataList o del componente che consumerà l’XMLDataSource come esporre i dati , attraverso la sintassi:

<asp:DataList ID="DataList1" runat="server"

DataSourceID="XmlDataSource1">

<ItemTemplate>

<strong><%#XPath("title")%></strong><br />

<em><%#XPath("description")%></em>

<%#XPath("pubDate")%><br />

<a href='<%#XPath("link")%>'>Link</a><br />

<br />

</ItemTemplate>

</asp:DataList>

Page 9: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

9Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Database e Visual Studio Web Developer

Con l’installazione standard di VWD viene installato anche SQL Server 2005 (2008) Express Edition

E’ possibile creare all’interno di VWD database Sql Server memorizzati all’interno della cartella dell’applicazione in formato MDF

Per creare un nuovo database: click con il dx sulla cartella AppData aggiungi nuovo elemento database

Per aggiungere un database esistente: click con il dx sulla cartella AppData aggiungi elemento esistente

Si può accedere alla finestra di Database Explorer dove è possibile creare tabelle, Store procedure, viste , etc, direttamente all’interno dello strumento (click con il dx……)

Page 10: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

10Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Accesso via codice

È possibile scrivere il codice per l'accesso ai dati utilizzando le classi dello spazio dei nomi System.Data, comunemente denominato ADO.NET, e dello spazio dei nomi System.Xml. Tale approccio veniva normalmente utilizzato nelle versioni precedenti di ASP.NET.

strSQLconnection string = “Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True”

SqlConnection conn = new SqlConnection (strSQLconnection);

SqlCommand SqlCommand = new SqlCommand ("SELECT * FROM tabella1", conn);

conn.open ();

SqlDataReader reader = SqlCommand.ExecuteReader ();

GridView1.DataSource reader =;

GridView1.DataBind ();

Page 11: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

11Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Accesso ai dati dichiarativo

ASP.NET, tuttavia, consente anche di eseguire l'associazione dati in modo dichiarativo.

Per quanto riguarda i più comuni scenari relativi ai dati, inclusi quelli riportati di seguito, tale operazione non richiede la scrittura di codice:

In ASP.NET sono disponibili vari tipi di controlli server che partecipano al modello di associazione dati dichiarativo, quali i controlli origine dati, i controlli con associazione a dati.

Tali controlli gestiscono le attività sottostanti richieste dal modello Web privo di stato per visualizzare e aggiornare i dati nelle pagine Web ASP.NET.

Page 12: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

12Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

SQL Server Data Source

-Per inserire un controllo di questo tipo basta trascinarlo dalla casella degli strumenti (sezione dati) oppure viene automaticamente inserito quando si trascina una tabella da database

<asp:SqlDataSource ID="SqlDataSource2" runat="server"

ConnectionString="<%$ ConnectionStrings:DatabaseFormawebConnectionString1 %>"

SelectCommand="SELECT DISTINCT [Categoria] FROM [Corsi]">

</asp:SqlDataSource>

L’attributo Connection String definisce a stringa di connessione che spesso è memorizzata nel file web.config (la sintassi per recuperarla è <%$..... )

Page 13: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

13Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

SQL Server Data Source

Il controllo Data Source si configura facilmente attraverso un apposito wizard, che permette di configurare la connessione e definire la stringa SQL di select relativa.

E’ possibile impostare delle query parametriche agendo sulla sezione di query, cliccando sul pulsante Where e definendo la provenienza del parametro di riferimento (query string, control, etc. ) sempre utilizzando il wizard

Page 14: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

14Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

SQL Server Data Source

Inoltre è possibile aggiungere anche delle query legate all’inserimento, modifica e cancellazione dei dati. Si accede dal pulsante avanzate dell’autocomposizione ed inoltre solo se la tabella ha un id chiave primaria

Nel wizard clicchiamo "Avanzate...". Appare una nuova finestra.

Page 15: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

15Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

SQL Server Data Source

SelectCommand="SELECT [id], [nome], [descrizione], [prezzo], [tipologia] FROM [veicoli] WHERE ([tipologia] LIKE '%' + @tipologia + '%')" ConflictDetection="CompareAllValues" DeleteCommand="DELETE FROM [veicoli] WHERE [id] = @original_id AND (([nome] = @original_nome) OR ([nome] IS NULL AND @original_nome IS NULL)) AND (([descrizione] = @original_descrizione) OR ([descrizione] IS NULL AND @original_descrizione IS NULL)) " InsertCommand="INSERT INTO [veicoli] ([nome], [descrizione], [prezzo], [tipologia]) VALUES (@nome, @descrizione, @prezzo, @tipologia)" OldValuesParameterFormatString="original_{0}" UpdateCommand="UPDATE [veicoli] SET [nome] = @nome, [descrizione] = @descrizione, [prezzo] = @prezzo, [tipologia] = @tipologia WHERE [id] = @original_id AND (([nome] = @original_nome) OR ([nome] IS NULL AND @original_nome……”>

Se visualizziamo il codice in origine troveremo la presenza degli attributi: DeleteCommand InserCommand UpdateCommand con i relativi parametri.

L'UpdateCommand ad esempio controlla se ci sono stati aggiornamenti al record originale e l'aggiornamento avviene solo se ciò non è avvenuto. Per tenere traccia dei record originali, li immagazzina con nome preceduto dalla stringa "original_".

Notiamo inoltre la presenza dell'attributo ConflictDetection che serve ad implementare la strategia "First-One Wins" (il primo che arriva vince) per la risoluzione di eventuali conflitti nell'accesso ai dati.

Page 16: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

16Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controlli consumatori di dati

Anche in questo caso esistono controlli facenti parte di Asp.net 2.0, 3.5 e 4.0

2.0GridView DataList DetailsView FormView Repeater 3.5List View (controllo evoluzione di frm view w details view)Data Pager (controllo per la paginazione usato con List View)

4.0QueryExtender( utilizzato solo per filtrare i dati restituiti dai controlli

EntityDataSource o LinqDataSource)Chart Control

Page 17: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

17Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo GridviewE’ un controllo molto potente per consumare dati che utilizza un data source

Il controllo GridView ha sostituito il DataGrid della precedente versione di ASP.NET.

Trascinandolo dalla toolbox e inserendolo in una pagina .aspx avremo la finestra:

Page 18: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

18Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

Se nella gestione del data source abbiamo scelto avanzate e impostato anche la sezione di inserimeno e modifica dei dati la finestra sarà invece visualizzata in questo modo

Page 19: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

19Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" EmptyDataText="Nessun record di dati da visualizzare." AllowPaging="True" AllowSorting="True" PageSize="3" BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Horizontal"> <AlternatingRowStyle BackColor="#F7F7F7" /> <Columns> <asp:BoundField DataField="NomeCorso" HeaderText="NomeCorso" SortExpression="NomeCorso" /> <asp:BoundField DataField="Descrizione" HeaderText="Descrizione" SortExpression="Descrizione" /></Columns></asp:GridView>

Come si vede per abilitare caratteristiche avanzate quali paginazione e ordinamento è sufficiente aggiungere degli attributi al controllo quali AllowPaging="True" AllowSorting="True“

Page 20: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

20Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" EmptyDataText="Nessun record di dati da visualizzare." AllowPaging="True" AllowSorting="True" PageSize="3“> <Columns> <asp:BoundField DataField="NomeCorso" HeaderText="NomeCorso" SortExpression="NomeCorso" /> <asp:BoundField DataField="Descrizione" HeaderText="Descrizione" SortExpression="Descrizione" /></Columns></asp:GridView>

Di default le colonne vengono legate con un controllo di tipo <asp:BoundField che automaticamente gestisce i vari template per la visualizzazione, modifica, inserimento e cancellazione( es. testo in visualizzazione , caselle di testo in modifica e/o inserimento).

Page 21: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

21Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

<asp:TemplateField HeaderText="Country" SortExpression="Country">

<EditItemTemplate>

<asp:DropDownList ID="DropDownListCountry" runat="server" AutoPostBack="True"

DataSourceID="SqlDataSourceCountry" DataTextField="Country"

DataValueField="Country">

</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSourceCountry" runat="server"

ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

SelectCommand="SELECT DISTINCT [Country] FROM [Customers]"></asp:SqlDataSource>

</EditItemTemplate>

<ItemTemplate>

<asp:Label ID="Label2" runat="server" Text='<%# Bind("Country") %>'></asp:Label>

</ItemTemplate>

</asp:TemplateField>

Usando i template si possono configurare in modo opportuno le differenti modalità di visualizzazione, editing e inserimento dei campi. Ad esempio legare un menù a discesa in fase di modifica o inserimento.

Page 22: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

22Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

Possono essere aggiunte delle colonne non legate ai dati o in aggiunta a quelle generate dallo strumento , utilizzando la sintassi <%#.....#> in cui si possono invocare metodi come Eval(“nomecampo”) o Bind(“nomecampo”)

<asp:TemplateField ShowHeader="False">

<ItemTemplate>

<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"

Text="Select in altra pagina"

PostBackUrl='<%# "DettaglioCustomer.aspx?CustomerID=" + Eval("CustomerId")%>' ></asp:LinkButton>

</ItemTemplate>

</asp:TemplateField>

Page 23: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

23Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Campi Template

<asp:DetailsView ID="DetailsView1" runat="server"> <Fields> <asp:CommandField ShowEditButton="True" ShowInsertButton="True" /> <asp:TemplateField HeaderText="CustomerID" SortExpression="CustomerID"> <EditItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("CustomerID") %>'/> </EditItemTemplate> <InsertItemTemplate> <asp:TextBox ID="txtCustomerId" runat="server" Text='<%# Bind("CustomerID") %>'/> </InsertItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("CustomerID") %>'/> </ItemTemplate> </asp:TemplateField> <%--[altri campi omessi]--%> </Fields> </asp:DetailsView>

Page 24: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

24Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Gridview

All’interno degli item tempate si possono usare due espressioni di binding molto comuni quando si utilizzano controlli collegati a dati e sono contraddistinte dal fatto che sono sempre incluse tra i tag <%# ... %>.

Il metodo Eval() esiste sin dalla versione 1.0 di ASP.NET (prima della 2.0 era conosciuta come DataBinder.Eval()) mentre Bind() è stato introdotto con la 2.0. Entrambi hanno la funzione di estrarre il valore della proprietà specificata dal DataSource sottostante durante un'operazione di binding.La differenza tra le due funzioni è che, mentre Eval() può solo leggere un valore Bind() può anche modificarlo; cioè è in grado di aggiornare la proprietà a cui si riferisce con il valore specificato nel controllo in cui è utilizzato.

Nel nostro esempio Bind() è utilizzato nel template di inserimento di un nuovo record, consentendo di inserire il valore della TextBox in una collection quando la TextBox viene letta.

Page 25: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

25Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

Alternativamente si può operare come sempre all’interno

della finestra delle proprietà

Page 26: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

26Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo Gridview

Se vogliamo personalizzare i numeri di pagina o aggiungere dei simboli possiamo agire ad esempio nelle proprietà raggruppate sotto la voce "PagerSettings", nel gruppo "Paging" della finestra Proprietà

Page 27: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

27Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Controllo DetailsView

Il controllo DetailsView permette oltre alla modifica e alla cancellazione anche di effettuare l’inserimento.

Spesso si utilizza congiuntamente alla GridViev per un risultato Master/Detail

Per tale operazione occorrono due data source (uno per il GridView e uno per il DetailsView) i due controlli e gestire la selezione del grid view affinche serva da parametro per la query del data sourse del detailview

Page 28: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

28Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Gestione eventi e eccezioni

E’ possibile gestire gli eventi legati ai vari elementi sia di tipi sorgente dati che consumatore.Per poter gestire un evento è possibile operare in diversi modi:1. Fare doppio click sul componente e verrà creata la procedura legata ad un evento

standard (il più probabile su quel’elemento)2. Selezionare dalla finestra di proprietà l’elenco degli eventi collegabili a quel componente

( elenco con i fulmini), scrivere la relativa procedura e fare invio3. andare in origine nel tag del componente, scrivere on…e vedere i tipi di eventi disponibili

e scrivere il nome della procedura da generare. Anndare poi nella parte .cs e scrivere la procedura legata alla’evento con la cosueta firma

Esempio: gestione dell’evento onRowUpdated su un GridView

protected void onRowUpdated(object sender, GridViewUpdatedEventArgs e) { { if (e.Exception != null) { LabelRisultatoExcDB.Text="Il record non è stato aggiornato!"; e.ExceptionHandled = true; } else LabelRisultatoExcDB.Text="Record aggiornato con successo!"; } }

Page 29: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin.

29Titolo Presentazione / Data / Confidenziale / Elaborazione di ...