通过OracleDataReader来读取BLOB类型的数据
在实际的应用过程中,需要把大块的二进制数据存储在数据库中。读取这些大块的数据,可以通过强制类型转换成为byte数组,但是当这个二进制数据体够大时(几十兆或者上百兆),一次并不能获取到他的完整长度,所以需要分块获取。
下面提供两种方法,供大家参考。
1、直接将BLOB数据转换成为byte数组




























2、将BLOB数据直接写到文件中去
long readStartByte = 0 ; // 从BLOB数据体的何处开始读取数据
int hopeReadSize = 1024 ; // 希望每次从BLOB数据体中读取数据的大小
long realReadSize = 0 ; // 每次实际从BLOB数据体中读取数据的大小
// CommandBehavior.SequentialAccess将使OracleDataReader以流的方式加载BLOB数据
OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (dr.Read())
{
FileStream fs = new FileStream(filename, FileMode.Create);
byte [] buffer = new byte [hopeReadSize];
realReadSize = dr.GetBytes( 0 , readStartByte, buffer, 0 , hopeReadSize);
// 循环,每次读取1024byte大小,并将这些字节写入流中
while (( int )realReadSize == hopeReadSize)
{
fs.Write(buffer, 0 , hopeReadSize);
readStartByte += realReadSize;
realReadSize = dr.GetBytes( 0 , readStartByte, buffer, 0 , hopeReadSize);
}
// 读取BLOB数据体最后剩余的小于1024byte大小的数据,并将这些字节写入流中
realReadSize = dr.GetBytes( 0 , readStartByte, buffer, 0 , hopeReadSize);
fs.Write(buffer, 0 , ( int )realReadSize);
}
转载自:http://blog.youkuaiyun.com/lonet/archive/2010/03/03/5342386.aspx