Om du bara behöver lagra XML och inte göra något annat åt den, är detta förmodligen det enklaste sättet att åstadkomma detta - med rakt enkelt ADO.NET:
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);
}
Detta skapar en fil D:\test.xml
(eller ändra det för att matcha ditt system) och kommer att lägga in dessa XML-taggar i den filen.
SqlCommand
objektet har också en .ExecuteXmlReader()
metod som skulle returnera en XmlReader
objekt för att skanna och manipulera XML - inte bara returnera en sträng. Använd det som är mest meningsfullt för dig!
PS:även utdata från FOR XML AUTO
är lite .... låt oss säga ... suboptimal. Den använder dbo.Employee
eftersom det är den huvudsakliga XML-taggen och så vidare... med SQL Server 2008 rekommenderar jag starkt att du tittar på att använda FOR XML PATH
istället - det låter dig justera och anpassa layouten för XML-utdata.
Jämför din ursprungliga XML-utdata med 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" />
mot den här frågan - bara för att se skillnaden:
SELECT
[EmployeeID] AS '@ID',
[LastName], [FirstName],
[Title],
[BirthDate], [HireDate]
FROM
[dbo].[Employees]
FOR XML PATH('Employee'), ROOT('Employees')
Utdata är:
<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>