2013-06-11 3 views
0

Я пытаюсь создать функцию, которая будет извлекать «некоторые» данные SQL из нескольких таблиц и хранить их в файле в формате XML.сохранение данных в файле формата xml

Если бы я сделать это с C#, это так просто, как: -

  • SQL заявление,

  • извлечения данных,

  • хранят данные в виде списка строк,

  • , а затем WriteXml (xmlFile, переменная, где хранятся данные)?

Может ли кто-нибудь показать мне пример?

Я смотрел на: -

WriteXml() и функции WriteXmlSchema() в C#

string xmlFile = Server.MapPath("Employees.xml"); 

ds.WriteXml(xmlFile, XmlWriteMode.WriteSchema); 

Кроме того, будет xmlSerialization быть что-то мне нужно взглянуть на?

Образец SQL-запроса.

SqlConnection Connection1 = new SqlConnection(DBConnect.SqlServerConnection); 
     String strSQL1 = "SELECT xxx.MEMBERKEY, xxx.MEMBID, xyz.HPCODE, convert(varchar, OPFROMDT, 101) as OPFROMDT" 
      + ", convert(varchar, OPTHRUDT, 101) as OPTHRUDT FROM [main].[dbo].[yyy] INNER JOIN [main].[dbo].[xxx] ON xxx.MEMBERKEY = yyy.MEMBERKEY " 
      + "and opthrudt >= opfromdt INNER JOIN [main].[dbo].[xyz] ON yyy.HPCODEKEY = xyz.HPCODEKEY where MembID = @memID"; 


     SqlCommand command1 = new SqlCommand(strSQL1, Connection1); 
     command1.Parameters.AddWithValue("@memID", memID); 
     SqlDataReader Dr1; 
     Connection1.Open(); 
     Dr1 = command1.ExecuteReader(); 

     while (Dr1.Read()) 
     { 
      HPCODEs.Add((Dr1["HPCODE"].ToString()).TrimEnd()); 
      OPFROMDTs.Add((Dr1["OPFROMDT"].ToString()).TrimEnd()); 
      OPTHRUDTs.Add((Dr1["OPTHRUDT"].ToString()).TrimEnd()); 
     } 
     Dr1.Close(); 

ответ

1

Существует так много подходов к этому.

Во-первых, вы можете потратить некоторое время и использовать SQL, встроенный в возможности XML, для запроса и получения XML-документа, который затем можно сериализовать прямо в файл. Очень простой пример можно найти here. Тогда вы будете использовать метод GetSqlXml в DataReader в, что-то вроде этого

SqlDataReader r = cmd.ExecuteReader(); 
SqlXml data = r.GetSqlXml(0); 
XmlReader xr = data.CreateReader(); 

Может быть другой вариант для чтения из считывателя данных SQL в DTO (объекты передачи данных). Вероятно, это проверенный метод. А затем, как только у вас есть список DTO, вы можете использовать сериализацию .NET (DataContractSerializer) для сериализации в XML.

+0

будет ли базовая команда «для xml auto» работать эффективно с несколькими объединениями таблиц? – Philo

+0

бьет меня, я не DBA :-), но я предполагаю, что он работает одинаково с добавленными накладными расходами на сериализацию. посмотрите на свой план выполнения и сравните его с одним без xml auto. –

0

Я очень рекомендую, глядя на инструмент, как это:

http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.80).aspx

Это создаст .net классы для вас, если у вас есть XSD на выходе XML, который вы пытаетесь создать.

В любом случае, отбрасывание ваших данных в классы стиля POCO и сериализация в XML намного лучше, чем попытка напрямую использовать XmlWriter.

+0

О нас http://msdn.microsoft.com/en-us/library/ms178107.aspx – Philo

+0

Я никогда раньше не использовал 'FOR XML'. Это будет работать на SQL-сервере, в отличие от того, где когда-либо запускается .Net-код. В любом случае, я уверен, все будет хорошо. Я знаю, что вы можете очень гибко настраивать XML, если используете POCO/XmlSerializer. – Jay

Смежные вопросы