从数据库中提取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列的实际大小呢?
答案 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)