将 XML 插入 SQL Server 2008 数据库

发布于 2024-09-18 04:07:19 字数 624 浏览 2 评论 0原文

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

救命,我被困住了。

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

Hello I'm trying to insert some XML data into a table on SQL Server 2008. However I keep getting thrown this error;

XML parsing: line 1, character 39, unable to switch the encoding

The database column filemeta uses the XML datatype, and I've switch the encoding to UTF-16 which I believe is necessary for adding XML data.

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>');

Help, I'm stuck.

NB: I created the XML with XMLTextWriter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

又爬满兰若 2024-09-25 04:07:19

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

请参阅有关 CAST 和 CONVERT 的 MSDN 文档 - 页面下方有您可以使用 CONVERTXML 使用多种样式以及有关它们的一些说明。

Yes, there are issues when you try to insert XML into SQL Server 2008 and the XML contains an encoding instruction line.

I typically get around using the CONVERT function which allows me to instruct SQL Server to skip those instructions - use something like this:

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

It has definitely helped me get various encoded XML stuff into SQL Server.

See the MSDN docs on CAST and CONVERT - a bit down the page there's a number of styles you can use for CONVERT with XML and some explanations about them.

鱼窥荷 2024-09-25 04:07:19

您只需在 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>');

You just need to include N in front of your XML string to make it 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>');
荒岛晴空 2024-09-25 04:07:19

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

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);

This worked for me without any errors:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文