Для початку, треба визначитися з використовуваної схемою БД для зберігання. А для цього треба відповісти на питання "звідки XML взагалі береться"?
Якщо документ може завантажуватися в базу користувачем - то найкраще підійти до питання його зберігання як до зберігання будь-якого файлу - тобто зберігати його в varbinary (max). плюс окремої колонкою ім'я файлу у вигляді рядка, плюс колонки для зберігання атрибутів файлу, на зразок дати створення / зміни.
Якщо XML формується всередині програми - то найкраще зберігати його в nvarchar (max). щоб не створювати самому собі проблеми з кодуваннями.
Перетворити XML-документ в рядок досить просто:
Однак, зазвичай немає сенсу зберігати у вигляді рядка весь документ цілком - досить зберігати його кореневої елемент:
Другий спосіб "обріже" зазвичай легко відновлюваністю XML-декларації. На зворотне перетворення це ніяк не вплине, оскільки кореневий елемент залишається сам по собі коректним документом.
Якщо ж ви вирішили зберігати документ у вигляді масиву байт - все стає несильно складніше:
Якщо є необхідність вказати конкретну кодування - можна треба використовувати StreamWriter:
Найпростіший спосіб:
- Зробити стовпець для зберігання типу nvarchar (MAX).
- Конвертувати xml-файл в string.
- Вставити цього рядка в БД (залежить від того як працюєте з даними)
Недоліком даного способу є те, що такий 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