2010-10-17 16 views
7

चलो कहते हैं कि मैं इसएसक्यूएल सर्वर से निर्यात एक्सएमएल

EmpID, EmpName 

1 , hatem 

की तरह एक मेज Employee है और मैं एक प्रश्न लिखते हैं: select * from Employee for xml auto

तो उत्पादन एक्सएमएल प्रारूप में होगा

मैं कुछ करना चाहता हूँ यह जानने में सहायता करें कि मैं अपने कंप्यूटर (एचडी) पर सहेजी जाने वाली एक्सएमएल फ़ाइल में परिणाम कैसे निर्यात कर सकता हूं क्योंकि मुझे इस फ़ोल्डर से .xml फ़ाइलों को पढ़ने की आवश्यकता है और उन्हें अपने .net एप्लिकेशन में deserialize।

+0

आप इस API का उपयोग करना चाहिए: youtube.com/watch? v = hlY_PoJhlMk –

उत्तर

14

आप केवल एक्सएमएल स्टोर करने के लिए और यह करने के लिए कुछ भी करने की जरूरत नहीं है, तो यह शायद सबसे आसान तरीका यह पूरा करने के लिए है - सीधे सरल 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 (या अपने सिस्टम से मेल खाने के लिए इसे बदलें) और उन एक्सएमएल टैग को उस फाइल में रखेगा। सिर्फ एक स्ट्रिंग वापस नहीं -

SqlCommand वस्तु भी एक .ExecuteXmlReader() विधि है जो स्कैन और एक्सएमएल हेरफेर करने के लिए एक XmlReader वस्तु वापसी होगी है। जो भी आपको सबसे ज्यादा समझ में आता है उसका प्रयोग करें!

पीएस: भी, FOR XML AUTO का आउटपुट थोड़ा सा है .... मान लें ... सबोपेटिमल। यह dbo.Employee का उपयोग करता है क्योंकि यह मुख्य एक्सएमएल टैग है और आगे ... SQL सर्वर 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> 
1

मैं मिला है एक ही समस्या और मैंने एक .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 version="1.0" encoding="utf-8"?> 
<Test> 
    <Something>1</Something> 
    <AnotherOne>2</AnotherOne> 
</Test> 
संबंधित मुद्दे