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ó, điều này có lẽ là cách dễ nhất để thực hiện điều này - sử dụng ADO.NET thẳng đơ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);
}
Điều này sẽ tạo ra một file D:\test.xml
(hoặc thay đổi điều đó để phù hợp với hệ thống của bạn) và sẽ đưa các thẻ XML đó vào tệp đó.
Đối tượng SqlCommand
cũng có phương thức .ExecuteXmlReader()
sẽ trả về đối tượng XmlReader
để 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ì làm cho ý nghĩa nhất đối với bạn!
PS: cũng vậy, đầu ra của FOR XML AUTO
là một chút .... giả sử ... tối ưu. Nó sử dụng dbo.Employee
vì đó là thẻ XML chính và vv ... với SQL Server 2008, tôi 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.
Hãy so sánh đầ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')
Output 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>
Bạn nên sử dụng API này: youtube.com/watch? v = hlY_PoJhlMk –