将XML插入SQL Server 2008数据库

won*_*nea 27 xml sql sql-server xmltextwriter

您好我正在尝试将一些XML数据插入到SQL Server 2008上的表中.但是我不断抛出此错误;

XML解析:第1行,第39个字符,无法切换编码

数据库列filemeta使用XML数据类型,我将编码切换为UTF-16,我认为这是添加XML数据所必需的.

INSERT INTO testfiles
  (filename, filemeta) 
VALUES 
  ('test.mp3', '<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');
Run Code Online (Sandbox Code Playgroud)

救命,我被困住了.

注意:我使用XMLTextWriter创建了XML.

mar*_*c_s 33

是的,当您尝试将XML插入SQL Server 2008并且XML包含编码指令行时,会出现问题.

我通常使用CONVERT允许我指示SQL Server跳过这些指令的函数 - 使用类似这样的东西:

INSERT INTO testfiles
  (filename, filemeta) 
VALUES 
  ('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2));
Run Code Online (Sandbox Code Playgroud)

它确实帮助我将各种编码的XML内容输入SQL Server.

请参阅有关CAST和CONVERT MSDN文档 -有些低落的页面有一些款式,你可以使用CONVERTXML和一些关于他们的解释.

  • +1这可能是整个SQL XML故事中最棘手的错误:将显式编码声明与从字符串类型(ASCII或Unicode)派生的隐式编码混合在一起.没有凡人有机会反对这个...... (4认同)

Joe*_*lli 18

您只需要在XML字符串前面包含N即可使其成为unicode.

INSERT INTO testfiles
  (filename, filemeta) 
VALUES 
  ('test.mp3', N'<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');
Run Code Online (Sandbox Code Playgroud)