将大型 CLOB 对象转换为 .NET 字符串以放入 DataGridView 单元格中

本文关键字:DataGridView 单元格 字符串 NET CLOB 大型 对象 转换 | 更新日期: 2023-09-27 18:35:17

我在 C# 中创建了一个 Windows 窗体 GUI,它可以在 DataGridView 中显示表格数据(针对 Oracle Server DB 的 SQL 查询的结果)。其中一个字段是XML,可能非常大,存储为CLOB(如果我是对的,字符大OBject)。当然,用户不会直接查看单元格,他宁愿双击单元格以查看打印精美的文件。问题是我需要将文件(CLOB)转换为.NET String,否则它会生成异常。作为解决方法,我尝试使用 Oracle to_char 过程,但它限制为 4000 个字符。所以我像这样获取文件的子字符串:

 select to_char(dbms_lob.substr(column_name, 4000, 1 ))

问题是,如果它包含超过 4000 个字符,它不会显示整个文件。我怎样才能规避这个限制?

将大型 CLOB 对象转换为 .NET 字符串以放入 DataGridView 单元格中

不要将 CLOB 或生成的字符串存储在 DataGridView 中。

相反,在 DataGridView 中捕获单击事件,然后将 CLOB 转换为字符串以供查看。 使用来自 System.Text.Encoding 的适当编码。

我假设您的 DataReader 或 DataAdapter(无论您以何种方式填充 DataSet)都会将您的 CLOB 存储在字节数组中。(就像SQLServer和Informix驱动程序一样)。

byte[] clob;
// get it from your datarow/datagridview bound item
string thexml = System.Text.Encoding.UTF8.GetString(theclob)

我使用了简单的:

if (reader.IsDBNull(i))
{
    cellValue = "NULL";
}
else
{
    OracleLob clob = reader.GetOracleLob(i);
    cellValue  = (string) clob.Value;
}