Как устранить ошибку «невозможно переключить кодировку» при вставке 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?

РЕДАКТИРОВАТЬОк, извините за путаницу - строка должна быть в 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 вencoding свойство спецификации 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));

Ответы на вопрос(8)

Ваш ответ на вопрос