Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Speichereffektive Methode zum Lesen von BLOB-Daten in C#/SQL 2005

Sehen Sie sich diesen ausgezeichneten Artikel hier an oder diesen Blogpost für eine lange Erklärung, wie es geht.

Grundsätzlich müssen Sie einen SqlDataReader verwenden und SequentialAccess angeben wenn Sie es erstellen - dann können Sie das BLOB aus der Datenbank in Blöcken der für Sie am besten geeigneten Größe lesen (oder schreiben).

Im Grunde so etwas wie:

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();

Markus