Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取Oracle BLOB字段_C#_Oracle_Blob_Streamreader - Fatal编程技术网

C# 读取Oracle BLOB字段

C# 读取Oracle BLOB字段,c#,oracle,blob,streamreader,C#,Oracle,Blob,Streamreader,我尝试读取Oracle BLOB字段并在richTextBox中显示内容。我发现谷歌的例子几乎是一样的,但我仍然无法让它工作。 我知道BLOB字段包含序列化数据。 这就是我到目前为止所做的: (阅读者工作正常) OracleBlob是一个流——它继承流 OracleBlob b = dr.GetOracleBlob(1); var sr = new System.IO.StreamReader(b); var content = sr.ReadToEnd(); 您应该能够通过这种方式获取数据

我尝试读取Oracle BLOB字段并在richTextBox中显示内容。我发现谷歌的例子几乎是一样的,但我仍然无法让它工作。 我知道BLOB字段包含序列化数据。 这就是我到目前为止所做的: (阅读者工作正常)


OracleBlob
是一个
——它继承

OracleBlob b = dr.GetOracleBlob(1); 
var sr = new System.IO.StreamReader(b);
var content = sr.ReadToEnd();
您应该能够通过这种方式获取数据

大数据块通常作为流交付

Oracle文档:OracleBlob

编辑 如果要将其强制转换为
字节[]
,请尝试以下操作:

Byte[] buffer = (Byte[])(dr.GetOracleBlob(1)).Value; 
var content = new String(Encoding.UTF8.GetChars(buffer));
BLOB的意思是“二进制大对象”-它是一个字节数组。您不能直接将其分配给字符串或附加它。你是想用CLOB吗

此外,RTF不是序列化数据或原始文本。它包含字体名称、代码等,这意味着您不能只是在它前面加上文本,然后获得一个有效的RTF文件。RTF可能包含嵌入的OLE对象,但现在这种情况非常罕见

例如,以下代码段是有效的RTF文档。将其附加到
文本
属性将显示所有特殊字符。它也不是Unicode,它是简单的旧ANSI:

{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard
This is some {\b bold} text.\par
}
假设字段类型正确,并且实际包含RTF文档,则可以使用以下方法将其内容加载到RTF中。OracleBlob是一个流,这意味着您可以编写:

var blob=dr.GetOracleBlob(1)
richTextBox1.LoadFile(blob,RichTextBoxStreamType.RichText);

加载文档后,您可以对其进行操作,并根据需要进行预处理。

我认为您需要首先执行以下操作:
OracleBlob=(OracleBlob)dr.GetOracleBlob(1)请参阅读取后的de dr。我已经在做了。您似乎没有使用
Blob1
。我刚刚发布了一些示例代码。BLOB是一个字节数组。不能将其分配给字符串。你期待什么?你可能把BLOB和CLOB(一个大字符串)混淆了吗?在任何情况下,都不能仅将RTF文本指定给
text
属性。RTF是一种文本格式,不是序列化数据。您将最终显示原始文件内容、字体名称和所有内容。我的答案有帮助吗?它还有一个
属性,以字节数组的形式返回所有数据。这不是问题所在。问题是OP试图将字节数组分配给字符串属性。我认为,您的
GetString
调用(显示DQStream)是不对的。尝试使用
UTF8
编码rtf不是纯文本。它包含字体大小、名称等,如
{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard
。OP似乎混淆了blob和RTF。
var blob=dr.GetOracleBlob(1)
richTextBox1.LoadFile(blob,RichTextBoxStreamType.RichText);