Pergunta

Olá, estou tentando inserir alguns dados XML em uma tabela no SQL Server 2008. No entanto, continuo sendo lançado esse erro;

XML Parsing: Linha 1, caractere 39, incapaz de mudar a codificação

A coluna do banco de dados FileMeta usa o tipo de dados XML e eu alterno a codificação para o UTF-16, que acredito ser necessária para adicionar dados 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>');

Ajuda, estou preso.

NB: Eu criei o XML com XMLTextWriter.

Foi útil?

Solução

Sim, existem problemas quando você tenta inserir XML no SQL Server 2008 e o XML contém uma linha de instrução de codificação.

Normalmente, eu uso o uso do CONVERT Função que me permite instruir o SQL Server a pular essas instruções - use algo assim:

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

Definitivamente me ajudou a colocar várias coisas XML codificadas no SQL Server.

Veja o Msdn docs em elenco e convertido - um pouco abaixo da página, há vários estilos que você pode usar para CONVERT com XML E algumas explicações sobre eles.

Outras dicas

Você só precisa incluir N na frente da sua sequência XML para torná -la 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>');

Isso funcionou para mim sem erros:

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top