Array
(
)

Ler foto do banco de dados

Alan Miranda
   - 16 set 2011

Boa Tarde Pessoal!

Observei alguns posts e não entendi mto bem...

Eu tenho algumas fotos no banco de dados SQL SERVER 2005 como bynario...Gostaria de ler e mostrar e uma picture box em um cadastro de clientes...

Vlww Pessoal

Alan Miranda
   - 19 set 2011

Pessoa alguem poderia me ajudar ?

Rodrigo Odasaki
   - 20 set 2011

Já tem um tópico neste fórum abordando este assunto. Tenta achar please. é mais ou menos de 3 a 4 meses.

Alan Miranda
   - 20 set 2011

Então eu vi este post, mas estou tentando fazer de outro jeito e ver se da certo...
Eu já tenho as fotos com binarios e gostaria de mostrar alguns campos e uma foto em uma picturebox.

#Código


Camada DAL
public SqlDataReader MostraUsuario(ClientesInformation cliente)
        {

            SqlConnection cn = new SqlConnection();
            {
                cn.ConnectionString = Dados.StringDeConexao;

                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cn;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "Select * from CLIENTES where CODIGO = @CODIGO";
                cmd.Parameters.AddWithValue("@CODIGO", cliente.Codigo);

                cn.Open();

                SqlDataReader Leitor;

                Leitor = cmd.ExecuteReader();
                
                if (Leitor.Read())
                {
                    cliente.Nome = Leitor["NOME"].ToString();
                    cliente.Email = Leitor["EMAIL"].ToString();
                    cliente.Telefone = Leitor["TELEFONE"].ToString();
                    cliente.Photo = (byte[])(Leitor["PHOTO"]);
                }

                return Leitor;
            } 

           
        }
 


Camada UI, Nessa camada não sei se tenho que converter os bytes para jogar no picture box... 

ClientesInformation Cliente = new ClientesInformation();

        Cliente.Codigo = Convert.ToInt32(TxtCodigo.Text);    
        Cliente.Nome = TxtUsuario.Text;
        Cliente.Email = TxtEmail.Text;
        Cliente.Telefone = TxtTelefone.Text;
        Cliente.Photo = (Byte[])Image1.DataBind;

        CadastroUsuarioFotu dados = new CadastroUsuarioFotu();
        dados.MostraUsuario(Cliente);


Poderia me ajudar!

Alan Miranda
   - 21 set 2011

Alguem poderia me ajudar ?

Alan Miranda
   - 26 set 2011

????

Paulo Freire
|
MVP
    26 set 2011

Tranforme seu Streaming

http://stackoverflow.com/questions/1668469/system-drawing-image-to-stream-c

http://stackoverflow.com/questions/1346519/streaming-byte-to-image-in-asp-net-c

http://support.microsoft.com/kb/317701

http://www.codeproject.com/KB/IP/ykw1.aspx

http://www.codeproject.com/KB/cs/PictureBoxImage.aspx

Alan Miranda
   - 29 set 2011

Paulo estou com um dificuldade enorme de converte-la para imagem novamente... :( :(

No meu caso estou em uma aplicação asp.net então o objeto é só image e não picturebox...
por isso estou com muitas dúvidas...a maioria dos exemplos é WINDOWS

Me ajudem ai pessoal, o código fonte já esta no tópico!

Desculpe me o transtorno!!

Rodrigo Odasaki
   - 30 set 2011

Amigo, posta sua dúvida também em http://social.msdn.microsoft.com/Forums
É o fórum oficial da Microsoft.

Na categoria você coloca .Net Development Geral

Paulo Freire
|
MVP
    30 set 2011

Vamos lá Alan, aqui também é um forum, nesse caso recomendo vc trabalhar com Handler.ashx, muito simples, ou vc cria uma pagina qualquer transformando binario para imagem.

1º - Cria uma pagina tipo ShowImage.aspx

2º - No code bihend

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace CMSO_Militar
{
public partial class ShowImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

string conStr = ConfigurationManager.ConnectionStrings["Conexao_2045"].ConnectionString;

string ID = Request.QueryString["ID"];

if (!string.IsNullOrEmpty(ID))
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand("SELECT FOTO, TIPO_FOTO FROM TBL_OFICIAIS WHERE ID = @id", con))
{
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(ID));

SqlDataReader dr;

con.Open();

dr = cmd.ExecuteReader();

if (dr.Read())
{
byte[] imgByte = (byte[])dr["FOTO"];
Response.ContentType = dr["TIPO_FOTO"].ToString();
Response.BinaryWrite(imgByte);
}
}
}
}

}
}
}

no browse coloque assim: localhost/ShowImage.aspx?ID=1 --- para o código 1

Paulo Freire
|
MVP
    30 set 2011

Para usar um Handler é mais fácil ainda...

1º - Dê um Add Item no seu projeto, escolha Web, Generic Handler, e de um nome qualquer tipo Handler.ashx

2º - Digite isso no code bihend

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;
using System.Data.SqlClient;
using System.IO;

public class Handler : IHttpHandler {

public void ProcessRequest (HttpContext context)
{
string conStr = ConfigurationManager.ConnectionStrings["Conexao_CMSO_1248777"].ConnectionString;

string ID = context.Request.QueryString["ID"];

if (!string.IsNullOrEmpty(ID))
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand("SELECT FOTO, TIPO_FOTO FROM TBL_OFICIAIS WHERE ID = @id", con))
{
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(ID));

SqlDataReader dr;

con.Open();

dr = cmd.ExecuteReader();

if (dr.Read())
{
byte[] imgByte = (byte[])dr["FOTO"];
context.Response.ContentType = dr["TIPO_FOTO"].ToString();
context.Response.BinaryWrite(imgByte);
}
}
}
}
}

public bool IsReusable {
get {
return false;
}
}
}

Para monstra no objeto Image da sua pagina ASP.Net:

this.Image1.ImageUrl = ("http://www.cmse.eb.mil.br/cmsp/456/Handler.ashx?id=" + GridViewOficiaisAtiva.DataKeys[Convert.ToInt32(e.CommandArgument)].Values["ID"].ToString());

ou

this.Image1.ImageUrl = ("http://www.cmse.eb.mil.br/cmsp/456/Handler.ashx?id=" + Datareader["ID"].ToString;

qualquer coisa griata ai,

Paulo Freire

Alan Miranda
   - 30 set 2011

Boa Tarde!

Então paulo na hora de ele fazer fazer o sql no banco, eu acho que está certo...
O problema é que eu preciso na camada de UI, converter essa foto e mostrar no objeto image....

#Código


ClientesInformation Cliente = new ClientesInformation();

Cliente.Codigo = Convert.ToInt32(TxtCodigo.Text);
Cliente.Nome = TxtUsuario.Text;
Cliente.Email = TxtEmail.Text;
Cliente.Telefone = TxtTelefone.Text;
Cliente.Photo = (Byte[])Image1.DataBind; //Nessa hora que eu não sei como converter e jogar no objeto....

CadastroUsuarioFotu dados = new CadastroUsuarioFotu();
dados.MostraUsuario(Cliente);

//Aqui mostra as informações no seus especificos objetos, depois que o DataReader leu as informações no banco...

//Cliente = TxtCliente Email = TxtEmail  Telefone = Txttelefone  image1 = image1 

TxtUsuario.Text = Cliente.Nome;
TxtEmail.Text = Cliente.Email;
TxtTelefone.Text = Cliente.Telefone;
image = //aqui tebho que passar a foto convertida para o usuário veja a foto...


Pessoal muito obrigado pela compreensão!

Paulo Freire
|
MVP
    30 set 2011

Então:

Image.ImageUrl = ("http://www.seusite.com.br/Handler.ashx?id=" + Cliente.Codigo;

Alan Miranda
   - 03 out 2011

Hummm vou tentar fazer assim...

Só mais um pergunta, ali mesmo onde eu trato as variaveis na UI tem como converter com File Stream ou MemoryStrem ?

Obrigado Paulo!

Paulo Freire
|
MVP
    04 out 2011

Seu Handler.ashx faz isso em:

byte[] imgByte = (byte[])dr["FOTO"];

context.Response.BinaryWrite(imgByte);

Alan Miranda
   - 07 out 2011

Bom dia...
Consegui fazer agora, mas tenho um pergunta...Na vdd nós fazemos dois selects no banco certo ? Se tiver muita foto no banco não vai dar problema de perfomance ?

Por isso que estava querendo converter a foto aqui nessa camada UI, é possivel ou somente criando um Handler ?

#Código

ClientesInformation Cliente = new ClientesInformation();

Cliente.Codigo = Convert.ToInt32(TxtCodigo.Text);

CadastroUsuarioFotu dados = new CadastroUsuarioFotu();
dados.MostraUsuario(Cliente);

TxtUsuario.Text = Cliente.Nome;
TxtEmail.Text = Cliente.Email;
TxtTelefone.Text = Cliente.Telefone;
Image1.imageUrl = URL;


Muito obrigado Mesmo!

Rodrigo Odasaki
   - 08 out 2011

A minha sugestão é sempre salvar em disco e colocar somente o nome da imagem no banco.