这实际上不是一个问题,这是一个我找不到任何帮助的问题,所以我想我会发布我最终找到的解决方案,以防其他人遇到它。
问题在于我传递给 SQL Server 2008 存储过程的 TVP 参数中的 XML 类型列。当我调用 ExecuteNonQuery() 时,我收到一个错误,就像
附加信息:XML解析:(行号等等)无法切换编码(等等)
这是因为 XML 像往常一样,被指定为 UTF-8
<?xml 版本="1.0" 编码="UTF-8" ?>
但 .NET 中的字符串是 UTF-16。解决方案是将带有 XML 的列声明为 DataTable 中的字节数组:
hitImport.Columns.Add("Answer", typeof(byte[]));
然后在添加行时获取 UTF-8 字节:
row["Answer"] = Encoding.UTF8.GetBytes(assignment.Answer);
ADO.NET 引擎知道如何将字节转换为 XML。希望对某人有所帮助!