2010-10-17 6 views
7

Допустим, у меня есть таблица Employee как этотэкспорт XML из SQL-сервера

EmpID, EmpName 

1 , hatem 

и я пишу запрос: select * from Employee for xml auto

поэтому вывод будет в формате XML

Я хочу некоторые помогите узнать, как я могу экспортировать результат в файл xml, который будет сохранен на моем компьютере (HD), поскольку мне нужно прочитать XML-файлы из этой папки и десериализовать их в моем приложении .net.

+0

Вы должны использовать этот API: youtube.com/watch? v = hlY_PoJhlMk –

ответ

14

Если вам нужно хранить только 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> 
1

Я имел и я создал .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> 
Смежные вопросы