Как преобразовать XmlDocument в массив <байт>?

Вот моя измененная версия кода счета:

CREATE TRIGGER mytrigger ON sometable
INSTEAD OF INSERT
AS BEGIN
  INSERT INTO sometable SELECT * FROM inserted WHERE ISNUMERIC(somefield) = 1 FROM inserted;
  INSERT INTO sometableRejects SELECT * FROM inserted WHERE ISNUMERIC(somefield) = 0 FROM inserted;
END

Это позволяет вставке всегда успешно выполниться, и любые поддельные записи брошены в Ваш sometableRejects, где можно обработать их позже. Важно заставить Вашу таблицу отклонений использовать nvarchar поля для всего - не ints, tinyints, и т.д. - потому что, если они становятся отклоненными, это - потому что данные не то, чем Вы ожидали, что он будет.

Это также решает несколько - рекордная проблема вставки, которая заставит триггер счета перестать работать. При вставке десяти записей одновременно (как то, если бы Вы делаете select-insert-into), и только один из них является поддельным, триггер счета отметил бы всех их как плохо. Это обрабатывает любое количество хороших и плохих записей.

я использовал этот прием на проекте организации хранилищ данных, где приложение вставки понятия не имело, хорошо работала ли бизнес-логика, и мы сделали бизнес-логику в триггерах вместо этого. Действительно противный для производительности, но если Вы не можете позволить сбою вставки, он действительно работает.

26
задан Newbie 30 September 2009 в 19:41
поделиться

2 ответа

Попробуйте следующее:

using System.Text;
using System.Xml;

XmlDocument dom = GetDocument()
byte[] bytes = Encoding.Default.GetBytes(dom.OuterXml);

Если вы хотите сохранить кодировку текста документа, измените кодировку По умолчанию на желаемую или выполните Предложение Джона Скита .

47
ответ дан 28 November 2019 в 06:22
поделиться

Запишите его в MemoryStream , а затем вызовите ToArray в потоке:

using System;
using System.IO;
using System.Text;
using System.Xml;

class Test
{
    static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("root");
        XmlElement element = doc.CreateElement("child");
        root.AppendChild(element);
        doc.AppendChild(root);

        MemoryStream ms = new MemoryStream();
        doc.Save(ms);
        byte[] bytes = ms.ToArray();
        Console.WriteLine(Encoding.UTF8.GetString(bytes));
    }
}

Для большего контроля над форматированием вы можете создать XmlWriter из потока и используйте XmlDocument.WriteTo (писатель) .

28
ответ дан 28 November 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: