Как решить «невозможно для переключения кодировки »при вставке XML в SQL Server

Я пытаюсь вставить в столбец XML (SQL SERVER 2008 R2), но сервер жалуется:

System.Data.SqlClient.SqlException (0x80131904) :
Разбор XML: строка 1, символ 39, невозможно переключить кодировку

Я обнаружил, что для успешной вставки столбец XML должен иметь формат UTF-16.

Я использую следующий код:

 XmlSerializer serializer = new XmlSerializer(typeof(MyMessage));
 StringWriter str = new StringWriter();
 serializer.Serialize(str, message);
 string messageToLog = str.ToString();

Как я могу преобразовать объект в строку UTF-8?

EDIT : Хорошо, извините за путаницу - строка должна быть в UTF-8. Вы были правы - по умолчанию это UTF-16, и если я попытаюсь вставить в UTF-8, он пройдет. Итак, вопрос в том, как сериализовать в UTF-8.

Пример

Это вызывает ошибки при попытке вставить в SQL Server:

    <?xml version="1.0" encoding="utf-16"?>
    <MyMessage>Teno</MyMessage>

Этого не происходит:

    <?xml version="1.0" encoding="utf-8"?>
    <MyMessage>Teno</MyMessage>

Обновление

Я понял, когда SQL Server 2008 для его типа столбца Xml требует utf-8, а когда utf-16 в свойстве кодировки спецификации xml, которую вы пытаетесь вставить:

Когда вы хотите добавить utf-8 , затем добавьте параметры к команде SQL следующим образом:

 sqlcmd.Parameters.Add("ParamName", SqlDbType.VarChar).Value = xmlValueToAdd;

Если вы попытаетесь добавить xmlValueToAdd с encoding = utf-16 в предыдущей строке, это приведет к ошибкам при вставке. Кроме того, VarChar означает, что национальные символы не распознаются (они превращаются в вопросительные знаки).

Чтобы добавить utf-16 в базу данных, используйте либо SqlDbType.NVarChar , либо SqlDbType.Xml в предыдущем примере или просто не указывайте тип вообще:

 sqlcmd.Parameters.Add(new SqlParameter("ParamName", xmlValueToAdd));
42
задан Solomon Rutzky 7 December 2018 в 17:22
поделиться