我尝试读取oracle blob字段并将内容显示为richtextbox。我在google上找到的例子几乎是一样的,但我还是无法让它工作。
我知道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 += "";
        }

最佳答案

OracleBlob是一个Stream——它继承了Stream

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

你应该可以这样得到数据。
大数据块通常以流的形式传递。
Oracle文档: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));

08-27 15:30