Le Streaming de données VARBINARY à partir de SQL Server en C#
Je suis en train de servir des données d'image stockées dans un VARBINARY(MAX) champ dans la base de données à l'aide de ASP.Net. Maintenant, le code est le remplissage d'un tableau de données, puis en tirant le tableau d'octets de la DataRow et en poussant le tableau d'octets dans la réponse. Je me demandais si il existe un moyen de plus ou moins le flux de données à partir de SQL Server dans la réponse sans avoir à le maréchal autour de ces immenses tableaux d'octets (puisque les images sont grandes, elles provoquent des OutOfMemoryExceptions). Est-il une classe/un mécanisme pour qui?
Le code actuel ressemble plus ou moins comme:
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();
}
Merci à l'avance de toute aide est appréciée.
OriginalL'auteur mhildreth | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
Voir Télécharger et Télécharger des Images à partir de SQL Server pour un article portant sur le sujet, y compris efficaces streaming sémantique. Vous devez utiliser un
SqlDataReader
ouvert avecCommandBehavior.SequentialAccess
:L'article lié fournit plein de code pour la création d'un Flux soutenu par un SqlDataReader, vous pouvez simplement
Stream.CopyTo
(HttpResponse.OutputStream)
, ou utiliser un byte[] chunked copie si vous n'avez pas .Net 4.0 encore.Ce suivi article explique comment utiliser une colonne FILESTREAM pour l'efficacité de la diffusion de grandes données VARBINARY dans et hors de la base de données.
Il ya beaucoup d'avantages de mise en œuvre SqlReaderStream de l'article que vous lien de le faire simplement un byte[] fragments de copier directement à l'aide de SqlDataReader.GetBytes? Il ressemble .NET 4.5, il y a maintenant un SqlDataReader.GetStream méthode.
Les classes de flux dans mon article sont nécessaires en raison principalement de gestion de durée de vie, comme le moment où le flux est créé (contrôleur) n'est pas lorsque le flux est utilisé (la réponse), et ils ont pour éliminer correctement les ressources.
OriginalL'auteur Remus Rusanu