您好,我试图将一些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>');

帮助,我被困。

NB:我用XMLTextWriter创建了XML。

有帮助吗?

解决方案

是的,当您尝试将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));

它肯定帮助我将各种编码的XML内容进入SQL Server。

看到 MSDN文档以及转换 - 在页面上有点款式,您可以使用多种样式 CONVERTXML 以及关于它们的一些解释。

其他提示

您只需要包括 n 在XML字符串的前面使其成为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>');

这对我有用而没有任何错误:

DECLARE @input XML 
SET @input = 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>'

INSERT INTO testfiles (filename, filemeta)
VALUES ('test.mp3', @input);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top