Вам необходимо создать URL, который обрабатывает изображения и возвращает содержимое БД в поток ответов. Как это происходит в SQL Saturday # 26 У меня была презентация, которая показала именно это. Вы можете сделать мои слайды и просмотреть их по ссылке, перейти к демонстрации 2, и в решении lotsOfPictures вы найдете Picture.aspx.cs, который выполняет именно то, что вы просите:
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd = new SqlCommand(
@"SELECT picture
FROM resized_pictures
WHERE picture_id = @id
AND picture_size = @size;", conn);
cmd.Parameters.AddWithValue("@id", pictureId);
cmd.Parameters.AddWithValue("@size", size);
using (SqlDataReader rdr = cmd.ExecuteReader(
CommandBehavior.SequentialAccess))
{
if (rdr.Read())
{
Response.ContentType = "image/jpeg";
byte[] bytes = new byte[1024];
long offSet = 0;
int countRead = (int) rdr.GetBytes(
0, offSet, bytes, 0, 1024);
while (countRead > 0)
{
Response.OutputStream.Write(bytes, 0, countRead);
offSet += countRead;
countRead = (int)rdr.GetBytes(
0, offSet, bytes, 0, 1024);
}
}
}
}
Важными частями головоломки являются флаг SequentialAccess, передаваемый считывателю SqlCommand, который будет возвращать истинный поток, поэтому страница не загружает все изображение в память перед возвратом. Для высокопроизводительного сервера вы должны использовать асинхронные операции, как описано в Асинхронные страницы в ASP.NET 2.0 .