Streaming VARBINARY data from SQL Server in C#

前端 未结 2 1219
情话喂你
情话喂你 2020-12-05 08:54

I\'m trying to serve image data stored in a VARBINARY(MAX) field in the database using ASP.Net. Right now, the code is filling a data table, then pulling the byte array out

相关标签:
2条回答
  • 2020-12-05 09:04

    See Download and Upload Images from SQL Server for an article covering the topic, including efficient streaming semantics. You must use a SqlDataReader opened with CommandBehavior.SequentialAccess:

    SequentialAccess Provides a way for the DataReader to handle rows that contain columns with large binary values. Rather than loading the entire row, SequentialAccess enables the DataReader to load data as a stream. You can then use the GetBytes or GetChars method to specify a byte location to start the read operation, and a limited buffer size for the data being returned.

    The linked article provides full code for creating a Stream backed by an SqlDataReader, you can simply Stream.CopyTo(HttpResponse.OutputStream), or use a byte[] chunked copy if you don't have .Net 4.0 yet.

    This follow up article explains how to use a FILESTREAM column for efficient streaming of large VARBINARY data in and out of the database.

    0 讨论(0)
  • 2020-12-05 09:14

    @Remus's answer above is out-of-date since .NET 4.5 introduced first-class SqlClient Streaming. It's no longer necessary to access the SqlDataReader's GetBytes() methods to get a stream from a SQL Query.

    Now you simply call SqlDataReader.GetStream(int) to get a stream over a blob column.

    0 讨论(0)
提交回复
热议问题