In un Tip precedente abbiamo visto come recuperare i valori di una base dati sotto forma di documenti
XML, attraverso l'utilizzo delloggetto
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 XMLQuesta clausola ha tre modalità
1.
RAW2.
AUTO3.
EXPLICITLa 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 RAWSELECT Immagine from Orders WHERE ID=23 FOR XML RAW,BINARY64Con la modalità
AUTO sono restituiti i dati come elementi nidificati.
Esempio
SELECT * FROM Orders WHERE FOR XML AUTOCon 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 laccesso al database.
Imports System.Data.SqlClients per VB.NET
Using System.Data.SqlClients; per C#
VB.NETDim command as New SqlCommand
command.CommandText="SELECT * FROM Orders FOR XML AUTO"
C#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.NETDim reader as System.XML.XmlReader = command.ExecuteXMLReader()
C#System.XML.XmlReader reader = command.ExecuteXMLReader();
In questo modo avremo il nostro file
XML che gestiremo con loggetto
XMLReader.