Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema de buffer MySqlDataReader GetBytes...


Em vez de ler todo o tamanho do buffer, peça apenas no máximo o tamanho do buffer, mas também no máximo o que você acredita que resta. Para ser honesto, você também pode criar um buffer exatamente do tamanho certo em vez de um tamanho fixo.
// 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;
}

Mas se você quisesse um buffer menor (por exemplo, se você estivesse processando um buffer de cada vez), você poderia usar:
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;
}