Olá  meu nome Emerson Jose,  nesse artigo pretendo ensinar como gravar imagens no banco SQL Server e também como recuperar essa imagens , usando WebService  é alguns dos recurso da própria Microsoft de redimensionamento de imagens.Primeiros passo e execultar esse script na nossa base de dados sql-Server:

Create database [BancoImagens];
Go
use [BancoImagens]
CREATE TABLE [dbo].[tb_Image](
[Id] [int] IDENTITY(1,1) NOT NULL,
[dsImage] [image] NULL,
CONSTRAINT [PK_tb_Image] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


Após isso vamos criar um novo projeto do tipo WEB  linguagem C#, e adicionar um novo modelo Linq caso tenha duvida de como criar e adicionar as tabelas segue o link abaixo.


http://www.asp.net/linq/videos/how-do-i-linq-to-sql-data-model

Após isso vamos arrastar a tabela tb_Image, para o modelo e salvar , depois é preciso  dar um Rebuild para gerar a nossa classe tb_Image, o próximo passo e adicionar uma classe como o nome BEImagens responsável por executar o método de salvar e chamar nossa imagem da base.

E preciso deixar há classe do como  public e também incluir a namespace do nosso modelo, agora vamos inserir os métodos abaixo sua classe BEImagens deve ficar dessa maneira.

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Summary description for BEImagens
/// </summary>
public class BEImagens
{
private DataDataContext _context;

public DataDataContext Context
{
get
{
return _context;
}
set
{
_context = value;
}
}

public void Save(byte[] Imagem)
{
using (Context = new DataDataContext())
{
tb_Image img = new tb_Image();
img.dsImage = Imagem;
Context.tb_Images.InsertOnSubmit(img);
Context.SubmitChanges();
}
}

public tb_Image GetImage(int pId)
{
using (Context = new DataDataContext())
{
return Context.tb_Images.OrderByDescending(t=>t.Id).FirstOrDefault(t => t.Id == pId);
}
}

public tb_Image GetImage()
{
using (Context = new DataDataContext())
{
return Context.tb_Images.OrderByDescending(t => t.Id).FirstOrDefault();
}
}

public BEImagens()
{
//
// TODO: Add constructor logic here
//
}
}


Após isso inclua no projeto a DLL Microsoft , e adicione também uma nova página do tipo Handlher.aspx.

obs: a DLL Microsoft vai estar no final do artigo para Download

O próximo passo e incluir o código abaixo responsável por processar a imagem e recuperar a imagem do nosso banco,  recebendo como parâmetro o tamanho da imagem e id, que vai ser usado no método de GetImage.

<%@ WebHandler Language=”C#” %>

using System;
using System.Web;
using Microsoft.Web;

public class GetImageHandler : ImageHandler {

public override ImageInfo GenerateImage(System.Collections.Specialized.NameValueCollection parameters)
{
tb_Image Image = null;
int width = 100;
int Id = 0;

if (int.TryParse(parameters["Width"], out width))
{
ImageTransforms.Add(new ImageResizeTransform { Width = width, Height = 200, Mode = ImageResizeMode.Crop, InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic });
}

if (Int32.TryParse(parameters["id"],out Id))
{
Image = new BEImagens().GetImage(Id);
}
if (Image != null)
{
return new ImageInfo(Image.dsImage.ToArray());
}

return null;
}

Agora vamos adicionar os controle na página

1-      FileUpload

2 – Button

Pronto após isso clique no Button para ele criar um novo evento click e adicione o código abaixo no code behind.

//adicionar o metodo no evento load da página para carregar nossa imagem depois que salvar a primeira vez

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadControles();
}
}

private void LoadControles()
{
tb_Image img = new BEImagens().GetImage();
if (img != null)
{

// chamar nossa página é passar como parametro o id da imagem e o tamanho coloquei como exemplo 200
Image.ImageUrl = string.Format(“GetImageHandler.ashx?Id={0}&Width={1}”, img.Id,200);
}
}

//metodo responsavel por salvar a imagem no banco
protected void btnSalvar_Click(object sender, EventArgs e)
{
byte[] image = new byte[FupImage.PostedFile.InputStream.Length];
FupImage.PostedFile.InputStream.Read(image, 0, image.Length);
new BEImagens().Save(image);
}

pós isso execulte o projeto caso tenha duvida para fazer o  exemplo segue o link abaixo para download do projeto, qualquer duvida ou sugestão viste meu blog: http://blog.emersonjsouza.com/


até a proxima.

Projeto

http://blog.emersonjsouza.com/Download/GravarImagens.rar

DLL

http://blog.emersonjsouza.com/Download/DLL_Microsoft.rar