阅读Oracle BLOB字段

时间:2017-01-29 17:44:05

标签: c# oracle blob streamreader

我尝试读取Oracle BLOB字段并将内容显示为richTextBox。我在谷歌找到的例子几乎相同,但我仍然无法让它发挥作用。 我知道BLOB字段包含序列化数据。 这是我到目前为止: (连接读者工作正常)

private void button1_Click_1(object sender, EventArgs e)
        {
            //testen of een blob is uit te lezen


            OracleCommand cmd = new OracleCommand();
            cmd.Connection = OraConnection.conn;

            cmd.CommandText = "select id, blobfield from test_table where id = '20ED7EDB-406A-43E8-945B-5E63DFCBA7FF'";
            cmd.CommandType = CommandType.Text;

            OracleDataReader dr = cmd.ExecuteReader();

            dr.Read();
            OracleBlob BLOB1 = dr.GetOracleBlob(1);

            Byte[] Buffer = (Byte[])(dr.GetOracleBlob(1)).Value;

            string lookupValue = System.Text.ASCIIEncoding.ASCII.GetString(Buffer);

            richTextBox1.Text += lookupValue;  //shows: DQStream
            richTextBox1.Text += "";
            richTextBox1.Text += "1";
            richTextBox1.Text += dr.GetOracleBlob(1).Value;  //shows: System.Byte[]
            richTextBox1.Text += "";
        }

2 个答案:

答案 0 :(得分:3)

OracleBlobStream - 它继承了Stream

OracleBlob b = dr.GetOracleBlob(1); 
var sr = new System.IO.StreamReader(b);
var content = sr.ReadToEnd();

您应该能够以这种方式获取数据。

大块数据通常作为流传递。

Oracle Docs:OracleBlob https://docs.oracle.com/cd/B19306_01/win.102/b14307/OracleBlobClass.htm

修改 如果您想将其转换为byte[],请尝试以下操作:

Byte[] Buffer = (Byte[])(dr.GetOracleBlob(1)).Value; 
var content = new String(Encoding.UTF8.GetChars(Buffer));

答案 1 :(得分:1)

BLOB表示“二进制大对象” - 它一个字节数组。您不能将其直接分配给字符串或附加它。您的意思是使用CLOB吗?

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

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

{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard
This is some {\b bold} text.\par
}

假设字段类型正确并且实际包含RTF文档,您可以使用LoadFile(Stream, RichTextBoxStreamType)方法将其内容加载到RTF中。 OracleBlob是一个流,这意味着您可以编写:

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

加载文档后,您可以操作它并添加任何内容。