2009-06-11 116 views
1

我已经有一个表3列(编号BIGINT,标题为nvarchar(450),描述为nvarchar(MAX)),在SQL 2008不能转换Unicode数据转换成XML列在SQL Server 2008

我决定转换标题和描述列到一个XML列中。但尝试更新得到许多错误,如“非法命名字符”或“非法限定名称字符”等时

来解决这个问题,我只是创建亚音速2.1的Windows应用程序与下面的代码

MyTable tbl = new MyTable(1111); 
tbl.myXMLcol = "<Person><Title><![CDATA[ " + HttpUtility.HtmlEncode(tbl.Title) + " ]]></Title><Description><![CDATA[ " + HttpUtility.HtmlEncode(tbl.Description) + " ]]></Description></Person>"; 
tbl.Save(); 

然后尝试将​​添加到第一个上面的字符串中,该字符串出现“无法切换编码”错误。

注:此外,我使用this method删除非法字符,但不解决我的问题

注2:我试图更新日本唱片认为得到这个错误,但是对于英语正常工作。

你能帮我吗。

谢谢。

+1

您使用的是什么编码? – 2009-06-11 17:13:01

回答

0

为什么不能做这一切直接在SQL Server?你可以试试这个:

UPDATE YourTable 
SET XmlCol = CAST(N'<Person><Title>' + Title + 
        N'</Title><Description>' + Description + 
        N'</Description></Person>' AS XML) 
WHERE ID = 12345 

这是否行得通?如果没有,那么也许这个呢?

UPDATE YourTable 
SET XmlCol = CONVERT(XML, N'<Person><Title>' + Title + 
          N'</Title><Description>' + Description + 
          N'</Description></Person>', 2) 
WHERE ID = 12345 

风格的“2”将删除SQL Server不喜欢的关于XML的东西 - 比如DTD等等。也许这对你的情况也有帮助?

从外部导入XML时,我遇到过各种SQL Server的XML支持麻烦。通常情况下,这种或那种方式,它结束了工作,虽然:-)

马克

+0

感谢您的回复 但不适用于我的任何你的方法,我得到错误“非法的xml字符” – Hamid 2009-06-11 17:49:30