阅读的Oracle BLOB字段

问题描述 投票:4回答:2

我试着去阅读一个Oracle BLOB字段和展示的内容我一个RichTextBox。我与谷歌找到的例子几乎是相同的,但我仍然不能得到它的工作。我知道BLOB字段包含序列化的数据。这是我到目前为止有:(该connecetion EN读者做工精细)

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 += "";
        }
c# oracle blob streamreader
2个回答
3
投票

OracleBlobStream - 它继承Stream

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

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

大数据块典型地递送作为流。

甲骨文文档: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
投票

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);

一旦加载文档,你可以操纵它与前面加上任何你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.