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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


