Se si tenta di inserire via codice un file XML in un campo XML di SQL Server 2005, è possibile ottenere una SqlException contenente il seguente messaggio:
XML parsing: line 1, character 38, unable to switch the encoding
Il problema nasce dal fatto che, tipicamente, i file XML sono codificati in UTF-8, mentre SQL Server si aspetta di ricevere documenti in formato UTF-16. Per risolvere questo inconveniente ci sono diverse soluzioni. Quella che adotto io consiste nello specificare il flag Encoding.Unicode quando apro il file XML da inserire nel database:
using (StreamReader sr = new StreamReader(filePath, Encoding.Unicode))
{
cmd.Parameters.Add("@xmlData", SqlDbType.Xml);
cmd.Parameters["@xmlData"].Value = new SqlXml(new XmlTextReader(sr));
}
In questo modo, il file XML viene interpretato secondo la codifica UTF-16, quindi può essere salvato correttamente in SQL Server 2005.