Si vous avez seulement besoin de stocker les données XML et ne pas faire quoi que ce soit d'autre à celui-ci est sans doute la meilleure façon d'y arriver - en utilisant ADO.NET droite simple:
string query = "SELECT EmployeeID, LastName, FirstName, Title, BirthDate, HireDate FROM dbo.Employees FOR XML AUTO";
using(SqlConnection _con = new SqlConnection("server=(local);database=Northwind;integrated security=SSPI;"))
using (SqlCommand _cmd = new SqlCommand(query, _con))
{
_con.Open();
string result = _cmd.ExecuteScalar().ToString();
_con.Close();
File.WriteAllText(@"D:\test.xml", result);
}
Cela va créer un fichier D:\test.xml
(ou changer cela pour correspondre à votre système) et mettra ces balises XML dans ce fichier.
L'objet SqlCommand
dispose également d'une méthode .ExecuteXmlReader()
qui renvoie un objet XmlReader
pour analyser et manipuler le code XML, et pas seulement pour renvoyer une chaîne. Utilisez ce qui vous semble le plus logique! PS: aussi, la sortie de FOR XML AUTO
est un peu .... disons ... suboptimal. Il utilise le dbo.Employee
comme balise XML principale et ainsi de suite ... avec SQL Server 2008, je vous recommande fortement d'utiliser FOR XML PATH
à la place - il vous permet de modifier et de personnaliser la mise en page de la sortie XML.
Comparez votre sortie XML d'origine avec FOR XML AUTO
<dbo.Employees _x0040_ID="1" LastName="Davolio" FirstName="Nancy" Title="Sales Representative" BirthDate="1948-12-08T00:00:00" HireDate="1992-05-01T00:00:00" />
<dbo.Employees _x0040_ID="2" LastName="Fuller" FirstName="Andrew" Title="Vice President, Sales" BirthDate="1952-02-19T00:00:00" HireDate="1992-08-14T00:00:00" />
contre cette requête - juste pour voir la différence:
SELECT
[EmployeeID] AS '@ID',
[LastName], [FirstName],
[Title],
[BirthDate], [HireDate]
FROM
[dbo].[Employees]
FOR XML PATH('Employee'), ROOT('Employees')
sortie est:
<Employees>
<Employee ID="1">
<LastName>Davolio</LastName>
<FirstName>Nancy</FirstName>
<Title>Sales Representative</Title>
<BirthDate>1948-12-08T00:00:00</BirthDate>
<HireDate>1992-05-01T00:00:00</HireDate>
</Employee>
<Employee ID="2">
<LastName>Fuller</LastName>
<FirstName>Andrew</FirstName>
<Title>Vice President, Sales</Title>
<BirthDate>1952-02-19T00:00:00</BirthDate>
<HireDate>1992-08-14T00:00:00</HireDate>
</Employee>
Vous devez utiliser cette API: youtube.com/watch? v = hlY_PoJhlMk –