比方说,我有一个表Employee
这样导出XML
EmpID, EmpName
1 , hatem
和我写的查询:select * from Employee for xml auto
所以输出将是XML格式的
我想要一些帮助知道如何将结果导出到xml文件以保存在我的计算机(HD)中,因为我需要从该文件夹读取.xml文件并在我的.net应用程序中反序列化它们。
比方说,我有一个表Employee
这样导出XML
EmpID, EmpName
1 , hatem
和我写的查询:select * from Employee for xml auto
所以输出将是XML格式的
我想要一些帮助知道如何将结果导出到xml文件以保存在我的计算机(HD)中,因为我需要从该文件夹读取.xml文件并在我的.net应用程序中反序列化它们。
如果你只需要存储的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输出的布局。
与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" />
比较原始的XML输出与此查询 - 刚刚看到的区别:
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>
我已经有同样的问题,我创建了一个将XML导出到文件的.NET CLR:
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>
你应该使用这个API:youtube.com/watch? v = hlY_PoJhlMk – 2016-09-15 20:39:05