确定BLOB列的大小

时间:2011-01-10 14:41:04

标签: c# arrays resize

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

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

所以我抓住了blob:

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中的大多数都比maxsize要小得多,那么如何将Byte数组的大小调整为blob列的实际大小呢?

2 个答案:

答案 0 :(得分:2)

为什么不查询字段的长度,所以第一次byte []的大小正确。

来自MSDN

  

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

所以你的代码会变成

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

Byte[] picture = new Byte[length];

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

答案 1 :(得分:1)