Nếu bạn chỉ cần lưu trữ XML và không làm bất cứ điều gì khác với nó, đây có lẽ là cách dễ nhất để thực hiện điều này - sử dụng ADO.NET đơn giản:
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);
}
Thao tác này sẽ tạo một tệp D:\test.xml
(hoặc thay đổi điều đó để phù hợp với hệ thống của bạn) và sẽ đặt các thẻ XML đó vào tệp đó.
SqlCommand
đối tượng cũng có .ExecuteXmlReader()
phương thức sẽ trả về một XmlReader
đối tượng để quét và thao tác XML - không chỉ trả về một chuỗi. Sử dụng bất cứ điều gì có ý nghĩa nhất đối với bạn!
Tái bút:cũng là đầu ra của FOR XML AUTO
là một chút .... giả sử ... dưới mức tối ưu. Nó sử dụng dbo.Employee
vì đó là thẻ XML chính, v.v. ... với SQL Server 2008, tôi thực sự khuyên bạn nên xem xét sử dụng FOR XML PATH
thay vào đó - nó cho phép bạn tinh chỉnh và tùy chỉnh bố cục của đầu ra XML.
So sánh kết quả đầu ra XML ban đầu của bạn với 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" />
chống lại truy vấn này - chỉ để thấy sự khác biệt:
SELECT
[EmployeeID] AS '@ID',
[LastName], [FirstName],
[Title],
[BirthDate], [HireDate]
FROM
[dbo].[Employees]
FOR XML PATH('Employee'), ROOT('Employees')
Đầu ra là:
<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>