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