读取 Oracle BLOB 字段

Han*_*svb 4 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 += "";
        }
Run Code Online (Sandbox Code Playgroud)

Gle*_*rie 5

OracleBlob是一个Stream- 它继承了Stream.

OracleBlob b = dr.GetOracleBlob(1); 
var sr = new System.IO.StreamReader(b);
var content = sr.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

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

大数据块通常以流的形式传送。

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));
Run Code Online (Sandbox Code Playgroud)