2011-01-10 54 views
2

从数据库中提取BLOB并存储在Byte数组中。最初它被定义为与DB上的BLOB柱相同的大小,这是相当大的。确定BLOB列的大小

int maxsize = 20971520; 
int thisSize; 
Byte[] picture = new Byte[maxsize]; 

所以我抢斑点:

rdr.GetBytes(3, 0, picture, 0, maxsize); 

,然后将其写入到磁盘:

FileStream fstream = new FileStream(ImageFullName,FileMode.OpenOrCreate,FileAccess.Write); 
BinaryWriter bwriter = new BinaryWriter(fstream); 
bwriter.Write(picture); 
bwriter.Flush(); 
bwriter.Close(); 
fstream.Close(); 

的问题是,大多数这些斑点是相当小的那个是最大范围,所以如何将字节数组的大小调整为blob列的实际大小?

回答

2

为什么无法查询看到字段的长度,因此字节[]的大小是正确的第一次。

MSDN

如果传递的缓冲区为空, GetBytes返回的 整个字段的字节长度,而不是基于缓冲器 偏移参数的 剩余大小。

所以,你的代码将成为

long length = rdr.GetBytes(3, 0, null, 0, maxsize); 

Byte[] picture = new Byte[length]; 

rdr.GetBytes(3, 0, picture, 0, length); 
+0

+1:好的研究! – 2011-01-10 15:08:05