バッファサイズ全体を読み取るのではなく、最大のみを要求します。 バッファサイズだけでなく、せいぜいあなたが信じているものが残っています。正直なところ、固定サイズではなく、正確に正しいサイズのバッファーを作成することもできます。
// 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;
}
ただし、より小さなバッファが必要な場合(たとえば、一度に1つのバッファを処理する場合)、次を使用できます。
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;
}