Как сделать результат запроса sql в файл xml
У меня есть sql-запрос, который выбирает некоторые данные из таблицы.
ID Name Number Email
1 a 123 [email protected]
2 b 321 [email protected]
3 c 432 [email protected]
Я получаю эти данные из таблицы. Я хочу создать XML файл из данных. Как этот
<Students>
<Student>
<id>1</id>
<name>a</name>
<number>123</number>
<email>[email protected]</email>
</Student>
<Student>
<id>2</id>
<name>b</name>
<number>321</number>
<email>[email protected]</email>
</Student>
<Student>
<id>3</id>
<name>c</name>
<number>432</number>
<email>[email protected]</email>
</Student>
</Students>
Как это сделать на С# и SQL Server?
Ответы
Ответ 1
Попробуйте следующее:
SELECT *
FROM dbo.YourStudentTable
FOR XML PATH('Student'), ROOT ('Students')
Это должно возвращать точно XML, который вы ищете (при условии, что у вас есть SQL Server 2005 или новее)
Подробнее читайте о том, как использовать FOR XML PATH
и его возможности в TechNet
Ответ 2
SQL Server:
просто добавление к @marc_s answer - обратите внимание, что xml чувствителен к регистру, а полученный xml будет выглядеть как
<Students>
<Student>
<ID>1</ID>
<Name>a</Name>
<Number>123</Number>
<Email>[email protected]</Email>
</Student>
</Students>
и если вы попытаетесь восстановить id
, вы ничего не найдете.
вы можете сделать что-то вроде этого:
select
ID as id,
Name as name,
Number as number,
Email as email
from dbo.Table1
for xml path('Student'), root('Students')
= > Пример скрипта sql.
С#:
вы можете использовать WriteXml метод:
var ds = new DataSet("Students");
var dt = ds.Tables.Add("Student");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("number", typeof(string));
dt.Columns.Add("email", typeof(string));
dt.Rows.Add(1, "a", "123", "[email protected]");
dt.Tables[0].Rows.Add(2, "b", "321", "[email protected]");
dt.Tables[0].Rows.Add(3, "c", "432", "[email protected]");
var stream = new StringWriter();
ds.WriteXml(stream);
или используя Linq для XML:
new XElement("Students", dt.AsEnumerable().Select(r =>
new XElement("Student",
new XElement("id", r["id"]),
new XElement("name", r["name"]),
new XElement("number", r["number"]),
new XElement("email", r["email"])
)));
Ответ 3
Хотя решение, предоставленное marc, является именно тем, что вам нужно, вы можете более подробно изучить различные варианты в статье Использование предложения FOR XML для Вернуть результаты запроса в формате XML.
Ответ 4
1) Создайте класс с именем student
[Serializable]
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public string Email { get; set; }
}
2) Получить данные в списке с именем StudentList
из базы данных
3) Затем откройте или создайте файл xml и добавьте значения
using (XmlWriter writer = XmlWriter.Create("Student.xml"))
{
writer.WriteStartDocument();
writer.WriteStartElement("Students");
foreach (Student student in StudentList)
{
writer.WriteStartElement("Student");
writer.WriteElementString("id", student.ID.ToString());
writer.WriteElementString("name", student.Name.ToString());
writer.WriteElementString("number", student.Number.ToString());
writer.WriteElementString("email", student.Email.ToString());
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
}
Ответ 5
Вы можете использовать функцию DataSet.GetXml()
для получения результата в файле формата XML