Попытка сохранить содержание XML в сбои SQL Server 2005 (кодирующий проблему)

В этом случае простым решением было бы закодировать его вручную следующим образом:

<svg height="220" width="400" viewBox="0 0 400 220"> 
  <path d="M10,10 L210,10 L210,210 L110,210 L110,110 L10,110  L10,10" stroke="green" fill="none" />
</svg>

Однако для более сложных фигур это не буду делать Решением будет удаление обводки из ваших фигур, заполнение их белым или любым другим цветом и применение фильтра для выделения группы фигур:

<svg height="220" width="400" viewBox="0 0 400 220">
<filter id="outline">
<feMorphology in="SourceAlpha" result="expanded"
operator="dilate" radius="3"/>
<feFlood flood-color="red" result="indi" />
<feComposite in ="indi" in2="expanded" operator="in" />
<feComposite in="SourceGraphic"/>
</filter>
  <g fill="white" filter="url(#outline)">
  <path d="M10 10 L110 10 L110 110 L10 110 Z"   />
  <path d="M110 10 L210 10 L210 110 L110 110 Z" />
  <path d="M110 110 L210 110 L210 210 L110 210 Z"  />
</g>  
</svg>
[ 114]

Надеюсь, это поможет.

10
задан marc_s 26 July 2011 в 12:28
поделиться

5 ответов

Необходимо преобразовать в utf-16

Я не эксперт по XML в SQL Server даже при том, что я использую его, но у нас была та же проблема в прошлом году, и это было несоответствие типа данных String, объявленного в SQL по сравнению с xml тем, чтобы быть отправленным.

5
ответ дан 4 December 2019 в 01:32
поделиться

Я нашел это на Google. http://social.msdn.microsoft.com/forums/en-US/sqlxml/thread/d40ef582-4ffe-4f4b-b6b8-03c6c0ba1a32/

Я думаю, что можно заменить строку

_cmd.Parameters.Add("@XmlContents", SqlDbType.Xml);

с

_cmd.Parameters.Add("@XmlContents", System.Data.SqlTypes.SqlXml);
1
ответ дан 4 December 2019 в 01:32
поделиться

Вы могли возможно переписать xml как unicode (возможно, к a MemoryStream) и отправьте это?Примечание: если Вы просто храните данные, можно использовать varbinary(max) (и это на самом деле будет более быстро). Это не испытывает затруднений с кодированием и также позволит Вам контролировать любое повреждение xml, что Вы получаете.

Если Вы запрашиваете данные как xml в сервере базы данных затем xml очевидно, способ пойти.

1
ответ дан 4 December 2019 в 01:32
поделиться

Я отправил некоторую информацию:

http://mrboratech.blogspot.com/2009/02/how-to-store-xmldocument-mssql-2005-as.html

1
ответ дан 4 December 2019 в 01:32
поделиться

Редактировать
Я пропустил часть вопроса, касающуюся ISO-8859-1 - решение ниже подходит для UTF8, но, очевидно, не решает проблему Марка, поскольку он не может изменить кодирование.


Вот решение, которое я использую:

И немного измененная версия кода, приведенного выше (я тестировал ее с файлом UTF8, используя SQL 2005):

using System.IO;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;

...
using (SqlConnection connection = new SqlConnection("conn string"))
{
    connection.Open();
    string sql = "INSERT INTO mytable (xmlColumn) VALUES (@xmlData)";
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        // Swap round if the source file is unicode         
        string xml = File.ReadAllText(@"C:\myxml.xml");
        //string xml = File.ReadAllText(@"C:\myxml.xml", Encoding.Unicode);

        using (MemoryStream stream = new MemoryStream())
        {
            using (StreamWriter writer = new StreamWriter(stream, Encoding.Unicode))
            {
                writer.Write(xml);
                writer.Flush();
                stream.Position = 0;

                SqlParameter parameter = new SqlParameter("@xmlData", SqlDbType.Text);
                parameter.Value = new SqlXml(stream);
                command.Parameters.Add(parameter);
                command.ExecuteNonQuery();
            }
        }
    }
}
1
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

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