3

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

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

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

4

2 回答 2

3

不要将 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)
于 2012-05-24T11:10:26.790 回答
2

我用了简单的:

if (reader.IsDBNull(i))
{
    cellValue = "NULL";
}
else
{
    OracleLob clob = reader.GetOracleLob(i);
    cellValue  = (string) clob.Value;
}
于 2012-05-30T11:58:20.490 回答