Mysql
 sql >> Database >  >> RDS >> Mysql

Problema del buffer di MySqlDataReader GetBytes...

Invece di leggere l'intera dimensione del buffer, chiedi solo al massimo la dimensione del buffer, ma al massimo anche ciò che ritieni sia rimasto. Ad essere onesti, potresti anche creare un buffer della dimensione esatta piuttosto che uno di dimensione fissa.

// 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;
}

Ma se volevi un buffer più piccolo (ad esempio se lo stavi elaborando un buffer alla volta) potresti usare:

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;
}