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

时间:2012-05-24 11:04:06

标签: c# .net oracle datagrid datagridview

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

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

问题是,如果文件包含超过4000个字符,则不会显示整个文件。 我怎么能绕过这个限制?

2 个答案:

答案 0 :(得分:3)

不要将CLOB或结果字符串存储在DataGridView中。

相反,捕获DataGridView中的click事件,然后将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)

答案 1 :(得分:1)

我使用了简单的:

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