Если вам нужно хранить только XML и ничего другого ему не делать, это, вероятно, самый простой способ сделать это - с помощью прямой простой 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);
}
Это создаст файл D:\test.xml
(или изменить это, чтобы соответствовать вашей системе) и поместит эти теги XML в этот файл.
Объект SqlCommand
также имеет метод .ExecuteXmlReader()
, который возвращает объект XmlReader
для сканирования и обработки XML - а не просто возвращает строку. Используйте то, что имеет для вас наибольший смысл!
PS: также выход FOR XML AUTO
немного ... скажем ... субоптимальный. Он использует dbo.Employee
в качестве основного тега XML и т. Д. ... с SQL Server 2008, я бы настоятельно рекомендовал вместо этого использовать FOR XML PATH
- он позволяет настраивать и настраивать компоновку вывода XML.
Сравните ваш первоначальный вывод XML с 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" />
против этого запроса - просто чтобы увидеть разницу:
SELECT
[EmployeeID] AS '@ID',
[LastName], [FirstName],
[Title],
[BirthDate], [HireDate]
FROM
[dbo].[Employees]
FOR XML PATH('Employee'), ROOT('Employees')
результат:
<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>
Вы должны использовать этот API: youtube.com/watch? v = hlY_PoJhlMk –