Strumieniowanie danych VARBINARY z serwera SQL w C#

Próbuję podać dane obrazu zapisane w polu VARBINARY (MAX) w bazie danych za pomocą ASP.Net. w tej chwili kod wypełnia tabelę danych, następnie wyciąga tablicę bajtów z bazy danych i wciska tablicę bajtów do odpowiedzi. Zastanawiam się, czy jest jakiś sposób na bardziej lub mniej strumieniowe przesyłanie danych z serwera SQL do odpowiedzi bez konieczności korzystania z tych ogromnych tablic bajtowych (ponieważ obrazy są duże, powodują OutOfMemoryExceptions). Czy istnieje klasa / mechanizm dla to?

Obecny kod wygląda mniej więcej tak:

DataTable table = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(commandText, connectionString);
adapter.Fill(table);
DataRow row = table.Rows[0];
byte[] imageData = row[0] as byte[];
if(imageData != null)
{
  Response.Clear();
  Response.BinaryWrite(imageData);
  Response.End();
}

Z góry dziękuję - każda pomoc jest mile widziana.

Author: mhildreth, 2011-02-18

1 answers

Zobacz pobieranie i przesyłanie obrazów z SQL Server Dla artykułu obejmującego ten temat, w tym wydajną semantykę strumieniową. Musisz użyć SqlDataReader otwarty z CommandBehavior.SequentialAccess:

SequentialAccess zapewnia sposób na DataReader do obsługi wierszy, które zawiera kolumny z dużymi binarnymi wartości. Zamiast ładować cały wiersz, sekwencyjny dostęp umożliwia DataReader do ładowania danych jako strumienia. Możesz następnie użyć GetBytes lub Metoda GetChars określająca bajt miejsce rozpoczęcia operacji odczytu, oraz ograniczony rozmiar bufora dla danych być zwrócony.

Połączony artykuł zawiera pełny kod do tworzenia strumienia wspieranego przez SqlDataReader, można po prostu Stream.CopyTo(HttpResponse.OutputStream), lub użyj bajtu [], jeśli nie masz jeszcze. Net 4.0.

Ten artykuł wyjaśnia Jak używać kolumny FILESTREAM do efektywnego przesyłania dużych danych VARBINARY W i z baza danych.

 19
Author: Remus Rusanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-18 17:46:02