而不是读取整个缓冲区大小,最多只询问缓冲区大小,但最多只询问您认为剩下的内容。老实说,您不妨创建一个大小正好合适的缓冲区,而不是一个固定大小的缓冲区。
// I assume this works for MySqlDataReader too...
int length = (int)reader.GetBytes(column, 0, null, 0, 0);
byte[] buffer = new byte[length];
int index = 0;
while (index < length)
{
int bytesRead = (int)reader.GetBytes(column, index,
buffer, index, length - index);
index += bytesRead;
}
但是,如果您想要一个较小的缓冲区(例如,如果您一次处理一个缓冲区),您可以使用:
int length = (int)reader.GetBytes(column, 0, null, 0, 0);
byte[] buffer = new byte[length];
int index = 0;
while (index < length)
{
int bytesRead = (int)reader.GetBytes(column, index, buffer, 0,
Math.Max(buffer.Length, length - index));
// Process the buffer, up to value bytesRead
// ...
index += bytesRead;
}