Home Page Home Page Tips & Tricks Restituire un file XML tramite SQL Server

Restituire un file XML tramite SQL Server


In un Tip precedente abbiamo visto come recuperare i valori di una base dati sotto forma di documenti XML, attraverso l'utilizzo dell’oggetto DataSet.

Spesso però questa soluzione non è la migliore perchè lavora in modalità disconessa e deve recuperare tutto lo schema della DataTable. Quindi se abbiamo la possibilità di avere come database relazionale Sql Server 2000, questo ci mette a disposizione un'istruzione Transact-SQL per poter recuperare i dati sotto forma di documenti XML.

Tutto ciò avviene attraverso la clausola FOR XML
Questa clausola ha tre modalità
1. RAW
2. AUTO
3. EXPLICIT

La modalità RAW restituisce ogni riga sotto forma di XMLELEMENT e bisogna specificare la clausola BINARY64 per farsi restituire i dati sotto forma di Base64 per esempio, quando si vogliono recuperare i campi BLOBB.

Esempio



SELECT * FROM Orders WHERE ID=23 FOR XML RAW
SELECT Immagine from Orders WHERE ID=23 FOR XML RAW,BINARY64

Con la modalità AUTO sono restituiti i dati come elementi nidificati.

Esempio


SELECT * FROM Orders WHERE FOR XML AUTO

Con la modalità EXPLICIT c'è la possibilità, di definire il formato del documento XML, pertanto tutti elementi devono essere definiti in modo esplicito.

Per recuperare i dati come documenti XML in .NET dobbiamo definirci un nostro SqlCommand (visto che utilizziamo SQL, utilizzeremo il namespace SqlClient) impostando la CommandText adeguata.

Nell'esempio seguente si suppone che si sia già impostata una connessione corretta.
Quindi definiamo il nostro SqlCommand:

Importiamo il namespace per gestire l’accesso al database.

Codice .NET n°1
Imports System.Data.SqlClients per VB.NET
Using System.Data.SqlClients; per C#


VB.NET
Codice .NET n°2
Dim command as New SqlCommand
command.CommandText="SELECT * FROM Orders FOR XML AUTO"


C#
Codice .NET n°3
SqlCommand command = new SqlCommand();
command.CommandText="SELECT * form Orders FOR XML AUTO";


Per eseguire quest'istruzione Transact-SQL abbiamo a disposizione un metodo della SqlCommand, ExecuteXMLReader:

Questo metodo restituisce proprio un'oggetto XmlReader quindi faremo:

VB.NET
Codice .NET n°4
Dim reader as System.XML.XmlReader = command.ExecuteXMLReader()


C#
Codice .NET n°5
System.XML.XmlReader reader = command.ExecuteXMLReader();


In questo modo avremo il nostro file XML che gestiremo con l’oggetto XMLReader.
Copyright © dotNetHell.it 2002-2018
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5