Pregunta

Hola, estoy tratando de insertar algunos datos XML en una tabla en SQL Server 2008. Sin embargo, sigo siendo lanzado este error;

Analización de XML: línea 1, carácter 39, incapaz de cambiar la codificación

La columna de la base de datos FileMeta utiliza el tipo de datos XML, y he cambiado la codificación a UTF-16, que creo que es necesario para agregar datos 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>');

Ayuda, estoy atascado.

NB: Creé el XML con XMLTextWriter.

¿Fue útil?

Solución

Sí, hay problemas cuando intenta insertar XML en SQL Server 2008 y el XML contiene una línea de instrucciones de codificación.

Por lo general, uso el CONVERT Función que me permite instruir a SQL Server para omitir esas instrucciones: use algo como esto:

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

Definitivamente me ha ayudado a obtener varias cosas de XML codificadas en SQL Server.

Ver el MSDN documentos en el elenco y la conversión - Un poco en la página hay varios estilos para los que puede usar CONVERT con XML Y algunas explicaciones sobre ellos.

Otros consejos

Solo necesitas incluir norte Frente a su cadena XML para hacerlo 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>');

Esto funcionó para mí sin ningún error:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top