我有麻烦。:(
MS SQL Server 2016 13.0.15900.1 .NET 框架 4.5.2
- 有一个带有大 xml 字段的表(> 1 mb)
- 使用(出)XPath 读取、更改和更新 [xmlField] 的糟糕程序
- 该过程从 [myTable] 中选择 [xmlField],其中 [id] = @id
- 以及带有(readuncommitted, nolock)的动态 SQL 请求。
可怕的程序和动态请求工作正常。选择 [xmlField] 的过程导致 System.Data.dll 中的 NullReferenceException
Object reference not set to an instance of an object. at System.Xml.XmlSqlBinaryReader.ScanAttributes()
at System.Xml.XmlSqlBinaryReader.ImplReadElement()
at System.Xml.XmlSqlBinaryReader.ReadDoc()
at System.Xml.XmlSqlBinaryReader.Read()
at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
at System.Data.SqlTypes.SqlXml.get_Value()
at System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
at System.Data.SqlClient.SqlCommand.CompleteExecuteScalar(SqlDataReader ds, Boolean returnSqlValue)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
到底发生了什么,我该如何避免呢?
很可能,我们只读取了XML的一部分,没有时间注册到最后,导致xml文档损坏。但是,如何才能避免这种情况呢?将 XML 作为字符串使用?