.net InitialLOBFetchSize为-1会导致空CLOB的IsDBNull返回true
今天我找到了.net InitialLOBFetchSize为-1会导致空CLOB的IsDBNull返回true,.net,oracle,ado.net,oracle11g,odp.net,.net,Oracle,Ado.net,Oracle11g,Odp.net,今天我找到了OracleCommand.InitialLOBFetchSize属性()。因为我使用的是NHibernate(它总是访问从DataReader返回的所有值),所以对于我的应用程序中所有新的OracleCommands,我都将其设置为-1(这在选择多个CLOB时带来了巨大的性能提升) 但后来我注意到我的应用程序中有几个新的bug。它们都有相同的源代码:OracleDataReader.IsDBNull()()对于空CLOB返回true!这是100%可复制的,将其设置回0或正值会使Is
OracleCommand.InitialLOBFetchSize
属性()。因为我使用的是NHibernate(它总是访问从DataReader
返回的所有值),所以对于我的应用程序中所有新的OracleCommands
,我都将其设置为-1(这在选择多个CLOB时带来了巨大的性能提升)
但后来我注意到我的应用程序中有几个新的bug。它们都有相同的源代码:OracleDataReader.IsDBNull()()对于空CLOB返回true!这是100%可复制的,将其设置回0或正值会使IsDBNull()
恢复其正确行为
有人知道如何在没有额外往返的情况下获得完整LOB的同时防止此错误吗
我注意到将InitialLOBFetchSize
设置为正值会影响OracleDataReader.RowSize
值,而0和-1会导致相同的RowSize
值。将InitialLOBFetchSize
设置为大值(一些MB)是否有任何缺点
我将ODP.NET 11.2.0.3.0(也尝试了11.2.0.2.0)与.NET 4.0和Oracle 11g Release 2服务器一起使用。一些测试表明,对
InitialLOBFetchSize使用大值(>=1 MB)会降低性能(与0一样糟糕)
在有人找到真正的解决方案之前,我将使用一个覆盖大多数CLOB(5-10 KB)的值。一些测试表明,对InitialLOBFetchSize使用大值(>=1 MB)会降低性能(与0一样糟糕)
在有人找到真正的解决方案之前,我将使用一个覆盖大部分CLOB(5-10 KB)的值。FYI:对于这个问题,有一个官方的Oracle错误条目。错误ID是14279177。我也遇到了这个问题。仅供参考:对于这个问题,有一个官方的Oracle错误条目。bug ID是14279177。我也遇到了这个。