Как экспортировать XML с помощью запроса SQL Server?
предположим, у меня есть стол Employee
такой
EmpID, EmpName
1 , hatem
и я пишу запрос: select * from Employee for xml auto
таким образом, вывод будет в формате XML.
Я хочу знать, как я могу экспортировать результат в XML-файл, который будет сохранен на диске моего компьютера, поскольку мне нужно прочитать XML-файлы из этой папки и десериализовать их в моем приложении .net.
2 ответов
Если вам нужно только сохранить 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 в этот файл.
на
у меня была та же проблема, и я создал .NET CLR, который экспортирует XML в файл:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;
using System.Xml;
using System.IO;
public sealed class StringWriterWithEncoding : StringWriter
{
private readonly Encoding encoding;
public StringWriterWithEncoding(Encoding encoding)
{
this.encoding = encoding;
}
public override Encoding Encoding
{
get { return encoding; }
}
}
public partial class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void XMLExport (SqlXml InputXml, SqlString OutputFile)
{
try
{
if (!InputXml.IsNull && !OutputFile.IsNull)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(InputXml.Value);
StringWriterWithEncoding sw = new StringWriterWithEncoding(System.Text.Encoding.UTF8);
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
IndentChars = " ",
NewLineChars = "\r\n",
NewLineHandling = NewLineHandling.Replace,
Encoding = System.Text.Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(sw, settings))
{
doc.Save(writer);
}
System.IO.File.WriteAllText(OutputFile.ToString(), sw.ToString(), System.Text.Encoding.UTF8);
}
else
{
throw new Exception("Parameters must be set");
}
}
catch
{
throw;
}
}
}
вот пример как использовать:
DECLARE @x xml
SET @x = '<Test><Something>1</Something><AnotherOne>2</AnotherOne></Test>'
EXEC dbo.XmlExport @x, 'c:\test.xml'
и выход-красиво отформатированный XML-файл:
<?xml version="1.0" encoding="utf-8"?>
<Test>
<Something>1</Something>
<AnotherOne>2</AnotherOne>
</Test>