복붙노트

[SQL] SQL 서버 2005에 XML 컨텐츠를 저장하는 데 실패 시도 (인코딩 문제)

SQL

SQL 서버 2005에 XML 컨텐츠를 저장하는 데 실패 시도 (인코딩 문제)

여러분,

이 광산을하지 이후, 나는 그것을 변경할 수 없습니다 :-( - 나는 ISO-8859-1 인코딩 수익률 데이터가있는 웹 서비스를

감사 목적을 위해, 나는 형의 "XML NULL"의 필드가있는 SQL Server 2005의 테이블에 이러한 호출에서 결과 XML을 저장하고 싶습니다.

내 C # 코드에서, I는 매개 변수화 쿼리를 사용하여 XML 필드에이 XML 컨텐츠를 저장하기 위해 뭔가를 시도

SqlCommand _cmd = new SqlCommand("INSERT INTO dbo.AuditTable(XmlField) VALUES(@XmlContents)", _connection);

_cmd.Parameters.Add("@XmlContents", SqlDbType.Xml);
_cmd.Parameters["@XmlContents"].Value = (my XML response);

_cmd.ExecuteNonQuery();

문제는 -이 코드를 실행하면, 나는 오류를 다시 얻을 :

?? 내가 알아 내려고 어디에되었다 어떻게 할 수 아마도 "스위치"인코딩 - 행운까지. 이 정말 무엇을 의미합니까? 나는 ISO-8859-1 2005 SQL 서버에서 인코딩에 XML을 저장할 수 없습니다? 아니면에 트릭이있다) 단지 자동적으로 SQL 서버에 저장하기 전에 UTF 인코딩에 대한 웹 서비스 응답을 변환하려면이 인코딩, 또는 b)를 받아들이는 SQL Server 2005를 말할?

힌트, 포인터, 조언에 감사드립니다! 즙을 짜고 난 찌꺼기

해결법

  1. ==============================

    1.당신은 UTF-16으로 변환해야

    당신은 UTF-16으로 변환해야

    나는 그것을 사용하더라도 SQL 서버에서 XML에 대한 전문가는 아니지만 우리는 작년 같은 문제를 가지고 있었고, 그것이 XML 존재하여 전송에 비해 SQL에서 선언 된 문자열 데이터 타입의 잘못 일치했다.

  2. ==============================

    2.나는 구글에이를 발견했다. http://social.msdn.microsoft.com/forums/en-US/sqlxml/thread/d40ef582-4ffe-4f4b-b6b8-03c6c0ba1a32/

    나는 구글에이를 발견했다. 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);
    
  3. ==============================

    3.당신은 아마도 (아마도 MemoryStream을에) 유니 코드로 XML을 다시 작성하고 그것을 보낼 수 있을까요? 참고 : 당신은 단지 데이터를 저장하는 경우, 당신은 VARBINARY (최대)를 사용할 수 있습니다 (그리고 실제로 더 빨리 될 것입니다). 이것은 어떤 인코딩 어려움이 없으며, 또한 당신이받을 수있는 손상 XML을 감사 할 수 있습니다.

    당신은 아마도 (아마도 MemoryStream을에) 유니 코드로 XML을 다시 작성하고 그것을 보낼 수 있을까요? 참고 : 당신은 단지 데이터를 저장하는 경우, 당신은 VARBINARY (최대)를 사용할 수 있습니다 (그리고 실제로 더 빨리 될 것입니다). 이것은 어떤 인코딩 어려움이 없으며, 또한 당신이받을 수있는 손상 XML을 감사 할 수 있습니다.

    데이터베이스 서버 내부 XML로 데이터를 쿼리하는 경우, XML은 갈 수있는 방법은 분명히있다.

  4. ==============================

    4.나는 약간의 정보를 게시 :

    나는 약간의 정보를 게시 :

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

  5. ==============================

    5.편집하다 이 솔루션은 아래 그가 인코딩을 변경할 수 없습니다로 마크의 문제가 해결되지 분명히 UTF8 좋은,하지만 - 나는 질문의 ISO-8859-1 부분을 놓쳤다.

    편집하다 이 솔루션은 아래 그가 인코딩을 변경할 수 없습니다로 마크의 문제가 해결되지 분명히 UTF8 좋은,하지만 - 나는 질문의 ISO-8859-1 부분을 놓쳤다.

    여기에 솔루션 I 사용이다 :

    그리고 위의 코드를 약간 수정 된 버전 (I 2005 SQL을 사용하여 UTF8 파일로 테스트했습니다)

    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();
                }
            }
        }
    }
    
  6. ==============================

    6.DB에 XML 컨텐츠를 삽입하는 동안에도 나는 유사한 문제에 직면했다. 예를 들어, 입력은 다음과 같이했다 :

    DB에 XML 컨텐츠를 삽입하는 동안에도 나는 유사한 문제에 직면했다. 예를 들어, 입력은 다음과 같이했다 :

    Insert Into TestData(Xml) Values ('<?xml version="1.0" encoding="UTF-8"?><Test/>')
    

    문 이런 종류의 실패를 사용하고 난 "전환 할 수 없음 .."지고 있다고 오류가 발생했습니다. 나중에 나는 단순히이 같은 XML 문자열에 N 접두사 :

    Insert Into TestData(Xml) Values (N'<?xml version="1.0" encoding="UTF-8"?><Test/>')
    

    이 후에는 일을 시작!

  7. from https://stackoverflow.com/questions/384974/trying-to-store-xml-content-into-sql-server-2005-fails-encoding-problem by cc-by-sa and MIT license