Per proseguire la settimana dedicata a SQLXML in questo script mostreremo come creare un feed RSS direttamente da SQL Server. Come nello script #608, la pagina ASP.NET ha solo la funzione di interrogare il database e scrivere in output l'XML:
Response.Clear();
Response.ContentType = "text/xml";
using (SqlConnection connection = new SqlConnection("server=(local);database=pubs;integrated security=sspi;"))
{
connection.Open();
SqlCommand command = new SqlCommand("ListTitlesForRss", connection);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
Response.Write(reader.GetString(0));
}
}In questo caso ci appoggiamo ad una stored procedure di nome "ListTitlesForRss", poiché il codice TSQL è più laborioso. Un feed rss (http://blogs.aspitalia.com/rss.aspx) necessita di una struttura XML che non possiamo ottenere automaticamente da SQL Server perciò dovremo utilizzare la forma FOR XML EXCPLICIT che permette di specificare nodi, attributi, ecc.
Usare la forma esplicita vuol dire fornire un resultset che sfruttando l'ordine dei record e i nomi delle colonne darà indicazioni al motore di SAL Server su come preparare l'XML.
Due colonne vanno sempre messe nel resultset e sono Tag e Parent. Entrambe servono per indicare ainquale nodo dobbiamo inserire le informazioni del record corrente. La prima indica il numero di riferimento del Tag (il nodo) e la seconda indica qual è il numero di riferimento del Tag padre alla quale il nodo appartiene. Le colonne successive invece indicheranno in base all'alias il nome dell'elemento, il numero del Tag, il nome dell'attributo (opzionale) e una direttiva (opzionale) in questa forma:
nomeElemento!tag!nomeAttributo!direttiva
Quindi la seguente query:
SELECT 1 AS Tag,
NULL AS Parent,
'ciao' AS [item!1]
FOR XML EXPLICITFornirà un solo record con 3 colonne: le due obbligatorie che indicano il numero di Tag, il parent, impostato a NULL perché è il nodo root e item!1 che indica come nome dell'elemento "item" e come tag di riferimento 1. In un'unica select abbiamo unito quella che è la dichiarazione della struttura tramite i nomi delle colonne e contenuto, tramite il valore "ciao". E' possibile separare le due cose con due query unite con la parola chiave UNION.
Il risultato di quella query sarà:
<item>ciao</item>Non essendo un articolo su SQLXML non mi soffermo molto, ma potete trovare ampia documentazione su MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsql/ac_openxml_03xh.asp
E' certamente una tecnica lunga e non di facile comprensione, ma è molto potente.
Nell'esempio trovate il file SQL contenente la stored procedure da aggiungere al database pubs presente in ogni versione di SQL Server così da essere provato subito in unione al file rss.aspx.
- ASP.NET 3.5 Extensions: MVC, history e Dynamic Data Controls
- #953 - Utilizzare le nuove funzionalità di URL Routing di ASP.NET 3.5 SP 1
- I bug di ASP.NET AJAX 1.0 risolti con ASP.NET AJAX 3.5
- LINQPad : un pratico tool per testare velocemente query LINQ
- I tanti modi di scrivere con Linq
- #908 - Cache con dipendenze aggregate con AggregateCacheDependency
- Realizzare applicazioni ASP.NET sicure - Seconda parte
- A volte ritornano... GridView vs Repeater vs ListView vs Custom
- #937 - Personalizzare il contenuto del profilo con l'evento Personalize
- #920 - Utilizzare HttpModule in modalità asincrona
- I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
- Cosa fare se la vostra applicazione ASP o ASP.NET è vittima di SQL injection
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Utilizzando lo script sql consigliato da voi ho avuto dei problemi nel render xml.Per risolvere ho sostituito la UNION ALL che aggrega le varie select...
Continua »»» | Rispondi »»»