0

我有麻烦。:(

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 作为字符串使用?

4

0 回答 0