我在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个字符,则不会显示整个文件。 我怎么能绕过这个限制?
答案 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;
}