Як зберегти xml документ в sql на c # - stack overflow російською

Для початку, треба визначитися з використовуваної схемою БД для зберігання. А для цього треба відповісти на питання "звідки XML взагалі береться"?

Якщо документ може завантажуватися в базу користувачем - то найкраще підійти до питання його зберігання як до зберігання будь-якого файлу - тобто зберігати його в varbinary (max). плюс окремої колонкою ім'я файлу у вигляді рядка, плюс колонки для зберігання атрибутів файлу, на зразок дати створення / зміни.

Якщо XML формується всередині програми - то найкраще зберігати його в nvarchar (max). щоб не створювати самому собі проблеми з кодуваннями.

Перетворити XML-документ в рядок досить просто:

Однак, зазвичай немає сенсу зберігати у вигляді рядка весь документ цілком - досить зберігати його кореневої елемент:

Другий спосіб "обріже" зазвичай легко відновлюваністю XML-декларації. На зворотне перетворення це ніяк не вплине, оскільки кореневий елемент залишається сам по собі коректним документом.

Якщо ж ви вирішили зберігати документ у вигляді масиву байт - все стає несильно складніше:

Якщо є необхідність вказати конкретну кодування - можна треба використовувати StreamWriter:

Найпростіший спосіб:

  1. Зробити стовпець для зберігання типу nvarchar (MAX).
  2. Конвертувати xml-файл в string.
  1. Вставити цього рядка в БД (залежить від того як працюєте з даними)

Недоліком даного способу є те, що такий xml буде "мертвими даними" з якими можна буде працювати тільки на клієнті. Набагато краще буде вибрати тип для стовпця XML (якщо такий підтримується вашої БД - наприклад MS SQL і MySQL), тоді з ним можна буде працювати і на сервері, але це окрема дуже широка тема, яка до того ж залежить від вашої БД.

відповідь дан 23 Серпня '16 о 10:55

Мені здається не зовсім коректно зберігати в типі даних nvarchar (MAX). Рядки без обмеження часто призводять до проблем. Як бути з кодуванням? Вам так не здається? - Denis Bubnov 23 Серпня '16 о 11:06

В принципі правильно, але є нюанс: такий спосіб працює незалежно від конкретної БД, ім'я файлу і кодування можна зберігати в окремих полях, nvarchar (MAX) можна в принципі обмежити, якщо заздалегідь відомо максимальний розмір файлу. Крім того в минулому питанні МС використовував взагалі varbinary (MAX), що вже взагалі погано. А так да тип XML (зі схемою) звичайно краще, але працювати буде тільки з конкретною БД. - Mirdin 23 Серпня '16 об 11:11

Схожі статті