sql >> Base de Datos >  >> RDS >> Mysql

Problema de búfer de MySqlDataReader GetBytes...

En lugar de leer todo el tamaño del búfer, solo solicite como máximo el tamaño del búfer, pero también como máximo lo que crees que queda. Para ser honesto, también podría crear un búfer del tamaño exacto en lugar de uno de tamaño fijo de todos modos.

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

Pero si quisiera un búfer más pequeño (por ejemplo, si lo estuviera procesando un búfer a la vez), podría 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;
}