[SQL] SQL 서버 2005에 XML 컨텐츠를 저장하는 데 실패 시도 (인코딩 문제)
SQLSQL 서버 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.당신은 UTF-16으로 변환해야
당신은 UTF-16으로 변환해야
나는 그것을 사용하더라도 SQL 서버에서 XML에 대한 전문가는 아니지만 우리는 작년 같은 문제를 가지고 있었고, 그것이 XML 존재하여 전송에 비해 SQL에서 선언 된 문자열 데이터 타입의 잘못 일치했다.
-
==============================
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.당신은 아마도 (아마도 MemoryStream을에) 유니 코드로 XML을 다시 작성하고 그것을 보낼 수 있을까요? 참고 : 당신은 단지 데이터를 저장하는 경우, 당신은 VARBINARY (최대)를 사용할 수 있습니다 (그리고 실제로 더 빨리 될 것입니다). 이것은 어떤 인코딩 어려움이 없으며, 또한 당신이받을 수있는 손상 XML을 감사 할 수 있습니다.
당신은 아마도 (아마도 MemoryStream을에) 유니 코드로 XML을 다시 작성하고 그것을 보낼 수 있을까요? 참고 : 당신은 단지 데이터를 저장하는 경우, 당신은 VARBINARY (최대)를 사용할 수 있습니다 (그리고 실제로 더 빨리 될 것입니다). 이것은 어떤 인코딩 어려움이 없으며, 또한 당신이받을 수있는 손상 XML을 감사 할 수 있습니다.
데이터베이스 서버 내부 XML로 데이터를 쿼리하는 경우, XML은 갈 수있는 방법은 분명히있다.
-
==============================
4.나는 약간의 정보를 게시 :
나는 약간의 정보를 게시 :
http://mrboratech.blogspot.com/2009/02/how-to-store-xmldocument-mssql-2005-as.html
-
==============================
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.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/>')
이 후에는 일을 시작!
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
'SQL' 카테고리의 다른 글
[SQL] 행 구분 기호 및 열 구분 SQL 서버에서 주어진 테이블에 분할 문자열 (0) | 2020.07.11 |
---|---|
[SQL] SQL 오라클 LEFT은 가입 및 하위 쿼리 오류 : ORA-00905 : 키워드 누락 (0) | 2020.07.11 |
[SQL] 최고의 성능을 ANDS에 Where 절의 주문 (0) | 2020.07.11 |
[SQL] LINQ하려면 SQL에만 시간을 비교 (0) | 2020.07.11 |
[SQL] 최대 절전 모드로, 어떻게 테이블을 조회 할 수 있습니다 키 값 쌍 ID> 이름의 해시 맵을 반환? (0) | 2020.07.10 |