Elaborazione di Franco Grivet Chin ASP. Net Accesso ai dati Elaborazione di Franco Grivet Chin Titolo 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 Titolo 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.) Titolo 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> Titolo 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 Titolo 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><p>La Comunità montana Valli di Lanzo, Ceronda e Casternone, la Città di Lanzo, </description></item> ….. Titolo 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>. Titolo 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> Titolo 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……) Titolo 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 (); Titolo 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. Titolo 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 è <%$..... ) Titolo 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 Titolo 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. Titolo 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. Titolo 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.0 GridView DataList DetailsView FormView Repeater 3.5 List View (controllo evoluzione di frm view w details view) Data Pager (controllo per la paginazione usato con List View) 4.0 QueryExtender( utilizzato solo per filtrare i dati restituiti dai controlli EntityDataSource o LinqDataSource) Chart Control Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Controllo Gridview E’ 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: Titolo 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 Titolo 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“ Titolo 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). Titolo 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. Titolo 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> Titolo 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> Titolo 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. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Controllo Gridview Alternativamente si può operare come sempre all’interno della finestra delle proprietà Titolo 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à Titolo 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 Titolo 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: Fare doppio click sul componente e verrà creata la procedura legata ad un evento standard (il più probabile su quel’elemento) Selezionare dalla finestra di proprietà l’elenco degli eventi collegabili a quel componente ( elenco con i fulmini), scrivere la relativa procedura e fare invio 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!"; Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...