Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Moyen efficace de mémoire pour lire les données BLOB en C#/SQL 2005

Voir cet excellent article ici ou ce article de blog pour une longue explication comment le faire.

Fondamentalement, vous devez utiliser un SqlDataReader et spécifier SequentialAccess lorsque vous le créez - vous pouvez alors lire (ou écrire) le BLOB à partir de la base de données en morceaux de la taille qui vous convient le mieux.

En gros, quelque chose comme :

SqlDataReader myReader = getEmp.ExecuteReader(CommandBehavior.SequentialAccess);

while (myReader.Read())
{
   int startIndex = 0;

   // Read the bytes into outbyte[] and retain the number of bytes returned.
   retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);

   // Continue reading and writing while there are bytes beyond the size of the buffer.
   while (retval == bufferSize)
   {
      // write the buffer to the output, e.g. a file
      ....

      // Reposition the start index to the end of the last buffer and fill the buffer.
      startIndex += bufferSize;
      retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);
   }

   // write the last buffer to the output, e.g. a file
   ....
}

// Close the reader and the connection.
myReader.Close();

Marc