Как сохранить XML(писатель) в базе данных

Я пишу программу, в которой пользователь делает некоторые вещи и может затем сохранить XML на своем жестком диске с помощью SaveFileDialog().

Текущий код создания XML-файла таков (фрагмент, который должен работать каждый):

SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == DialogResult.OK)
{
using (XmlWriter writer = XmlWriter.Create(filename))
{
    try
    {
        writer.WriteStartDocument();

        writer.WriteStartElement("Questionnaire");
        writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
        writer.WriteAttributeString("xsi", "noNamespaceSchemaLocation", null, "D:\\Schema.xsd");

        writer.WriteStartElement("Title");
        writer.WriteString("test");
        writer.WriteEndElement();
        writer.WriteStartElement("Number");
        writer.WriteString("1");
        writer.WriteEndElement();
        writer.WriteEndElement();
        writer.Flush();
        writer.Close();
    }
    catch (Exception ex)
    {
        System.Windows.MessageBox.Show(ex.Message);
    }
}
}

Теперь я также хочу сохранить XML в моей базе данных. Либо с использованием типа столбца xml в моей таблице (я не знаю, как или что сохранить в этом столбце) или путем сохранения полного кода XML в столбце типа nvarcharчто я на самом деле хотел бы сделать.

Как я могу сохранить XML-файл, который был создан XmlWriter в мою базу данных (столбец типа xml или же string который включает в себя XML)? Говоря "который включает в себя XML" я имею в виду полный код XML, как

<Title>
    MyTitle
</Title>

1 ответ

Решение

Вы можете использовать следующий конструктор:

var sb = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sb))
{ 
    // rest of your code above
    SaveToDb(sb.ToString());
}

И SaveToDb Метод (проверка и обработка исключений опущены):

private static void SaveToDb(string xml)
{
    using (var connection = new SqlConnection(conn))
    using (var command = new SqlCommand(
        "INSERT MyXmlTable VALUES (@XML)",
        connection))
    {
        command.Parameters.Add("XML", SqlDbType.Xml, xml.Length).Value = xml;
        connection.Open();
        var result = command.ExecuteNonQuery();
    }
}
Другие вопросы по тегам