Bind to HIGH_VALUE



使用 VB.NET 我把SQL查询的结果放进去:

select TABLE_NAME, PARTITION_NAME, HIGH_VALUE from user_tab_partitions WHERE TABLE_NAME LIKE 'LXA%' OR TABLE_NAME LIKE 'LNX%'

进入DataTable(通过Oracle.DataAccess.Client.OracleDataReader(。

然后,我将 WPF DataGrid绑定到该表的内容,在表上使用ItemsSource="{Binding Source={x:Static l:Handlers.DatabaseHandler}, Path=DBPartitionData}",在DataGridTextColumn上使用Binding="{Binding TABLE_NAME}"

这适用于TABLE_NAMEPARTITION_NAME,但HIGH_VALUE不显示。SQL 查询在 Oracle SQL Developer 中运行良好。

环顾四周,似乎HIGH_VALUE以某种内部预言机格式存储 - 所以我的问题是:

如何绑定到该值?甚至使用它?我可以使用哪个Oracle.DataAccess.Types(如果有(,或者如果所有其他方法都失败了,我如何直接显示值而不解析它?返回对象上的 ToString(( 似乎只给出空字符串。

有很多网站解释了如何使用 pl/SQL 获取值,但没有关于如何在 .NET 中将其显示为(任何类型的(字符串。

感谢您的帮助。

--编辑--

我无法调试并查看从 sql 查询返回的数据表中的内容,因为我的本地机器上没有带有分区的 Oracle 版本 - 仅在测试机器上(没有 VS(。但是,放入一些日志记录,似乎:返回的HIGH_VALUE值是非空的,并且它们的 ToString(( 返回一个零长度值。

USER_TAB_PARTITIONS.HIGH_VALUE列是一个LONG,Oracle很久以前就弃用了它,但内部仍在使用。使用它们有点痛苦,这就是为什么他们告诉其他人改用 LOB 的原因。

来自 OracleDataReader 文档:

默认情况下,InitialLONGFetchSize 设置为 0。在这种情况下,ODP.NET 不会在 OracleDataReader 对象上的读取方法调用期间提取任何 LONG 或 LONG RAW 列数据。

虽然它继续提到显式调用类型化访问器方法,但它随后也说:

为了能够在选择列表中没有主键列、ROWID 或唯一列的情况下获取整个 LONG 或 LONG RAW 数据,请将 OracleCommand 对象上的 InitialLONGFetchSize 属性的大小设置为等于或大于需要检索的字符数或字节数。

通过将 InitialLONGFetchSize 设置为 -1,可以从数据库中获取整个 LONG 或 LONG RAW 数据以进行选择查询,而无需选择列表中的主键、ROWID 或唯一列。

在您的情况下,似乎只需将InitialLONGFetchSize更改为 -1 即可解决您的问题并导致检索和显示整个值。

相关内容

  • 没有找到相关文章

最新更新