Как достать картинку из поля базы MSSQL

Как достать картинку из базы? да легко!

расположим на форме GridView:

    <asp:GridView ID="gvImages" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" >
            <Columns>
                <asp:BoundField HeaderText = "Image Name" DataField="imagename" />
                <asp:TemplateField HeaderText="Image">
                 <ItemTemplate>
                    <cc1:GeneratedImage ID="GeneratedImage2" runat="server"
            ImageHandlerUrl="~/ImageFromDB.ashx" >
            <Parameters>
                <cc1:ImageParameter Name="ImID" Value='<%# Eval("ImageID")%>' />
            </Parameters>
        </cc1:GeneratedImage>
                 </ItemTemplate>
            </asp:TemplateField>            
            </Columns>
</asp:GridView>
Заполним его во время загрузки страницы:
protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        SqlCommand command = new SqlCommand("SELECT imagename,ImageID,Image from [Image]", connection);
        SqlDataAdapter ada = new SqlDataAdapter(command);
        ada.Fill(dt);
        gvImages.DataSource = dt;
        gvImages.DataBind();
    }
Назовем наш хендлер ImageFromDB.ashx и опишем его:
using System;
using System.Web;
using System.Collections.Specialized;
using System.Configuration;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using Microsoft.Web;
public class ImageFromDB : ImageHandler {
    public ImageFromDB() {
        this.EnableServerCache = true;
        this.EnableClientCache = true;    
       }  
    public override ImageInfo GenerateImage(NameValueCollection parameters) {
        // Добавляем логику генерации изображения и возвращем инстанс класса ImageInfo
       string imageid = parameters["ImID"].ToString();

        SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
        connection.Open();
        SqlCommand command = new SqlCommand("select Image from Image where ImageID=" + imageid, connection);
        SqlDataReader dr = command.ExecuteReader();
        dr.Read();   
        this.ImageTransforms.Add(new WaterMark());
        return new ImageInfo((Byte[])dr[0]);
    }
}

Класс трансформации изображения
public class WaterMark : ImageTransform
{
       public WaterMark()   { }

    public override System.Drawing.Image ProcessImage(System.Drawing.Image img)
    {
        Graphics gra = Graphics.FromImage(img);

    // ну тут мы просто добавляем надпись на картинку
         gra.DrawString("www.microsoft.com", new Font("Verdana", 18), new SolidBrush(Color.Green), img.Width / 2, img.Height / 2);
        return img;
    }
}