标签: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 += "";
}
解决方法:
OracleBlob是一个流 – 它继承了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));
标签:c,oracle,blob,streamreader 来源: https://codeday.me/bug/20190623/1266203.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。