我尝试读取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));