CSharp: ExemploAspAdo

From AdonaiMedrado.Pro.Br
Jump to: navigation, search

Arquivo Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Página Exemplo</title>
</head>
<body>
    <form runat="server">
    <div>
        <h1>Página de Exemplo:</h1>
        <div>            
            <asp:Label ID="Resultado" runat="server"></asp:Label>
        </div>
        <div>
            <asp:FileUpload ID="CarregadorDeArquivoPrincipal" runat="server" />
        </div>
        <div>
            <asp:Button ID="Carregar" runat="server" Text="Carregar" 
                onclick="Carregar_Click" />
        </div>
        <div>
            <hr />
        </div>
        <div>
            <asp:GridView ID="Album" runat="server" AutoGenerateColumns="false" 
                GridLines="Vertical"
                onselectedindexchanging="Album_SelectedIndexChanging">
                <Columns>
                    <asp:BoundField 
                        DataField="imagem_id" 
                        HeaderText="Imagem ID" />
                    <asp:BoundField 
                        DataField="imagem_tamanho"
                        HeaderText="Tamanho (bytes)"
                        HeaderStyle-HorizontalAlign="Right"
                        ItemStyle-HorizontalAlign="Right" />
                    <asp:CommandField 
                        SelectText="Exibir" 
                        ShowCancelButton="false" 
                        ShowDeleteButton="false" 
                        ShowEditButton="false" 
                        ShowSelectButton="true" />
                </Columns>
            </asp:GridView>
        </div>
    </div>    
    </form>
</body>
</html>

Arquivo Default.aspx.cs

using System;
using System.Data.SqlClient;
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;
 
public partial class _Default : System.Web.UI.Page 
{
    /// <summary>
    /// Processo de carga inicial da página.
    /// </summary>    
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                AssociarGridView();                
            }
        }
        catch (Exception ex)
        {
            Resultado.Text = 
                "Impossível carregar página corretamente. "
                + ex.Message
                + (ex.InnerException != null ? ex.InnerException.Message : string.Empty);
        }
    }
    /// <summary>
    /// Manda associar grade de visualização 
    /// para exibir dos dados salvos na tabela.
    /// </summary>
    private void AssociarGridView()
    {
        try
        {
            SqlConnection conexao =
                RetornarConexaoComSqlServer();
 
            //Usa o adaptador de dados para carregar as informações no 
            //agrupamento de dados.
            //ATENÇÃO PARA A FUNÇÃO DATALENGTH que obtém o tamanho utilizado no campo.
            SqlDataAdapter adaptador = new SqlDataAdapter(
                "SELECT imagem_id, DATALENGTH(imagem_conteudo) AS imagem_tamanho FROM "
                + " imagem", conexao);
            DataSet dataSet = new DataSet();
            adaptador.Fill(dataSet);
 
            //Associa dados à grade de visualização.
            Album.DataKeyNames = new string[] { "imagem_id" };
            Album.DataSource = dataSet;
            Album.DataBind();
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException(
                "Impossível carregar grade de visualização corretamente.", 
                ex);
        }
    }
    /// <summary>
    /// Retorna uma conexão SqlServer com o servidor baseando-se em parâmetros pré-configurados.
    /// </summary>    
    private SqlConnection RetornarConexaoComSqlServer()
    {
        SqlConnectionStringBuilder montadorDeStringDeConexao =
                new SqlConnectionStringBuilder();
 
        //Monta string de conexão através do montadorDeStringDeConexao.
        montadorDeStringDeConexao.UserID = "lpac";
        montadorDeStringDeConexao.Password = "lpac123";
        montadorDeStringDeConexao.InitialCatalog = "lpac";
        montadorDeStringDeConexao.ApplicationName = "Website de Exemplo";
        montadorDeStringDeConexao.DataSource = ".\\Futuro";
        montadorDeStringDeConexao.PersistSecurityInfo = true;
 
        return new SqlConnection(
                montadorDeStringDeConexao.ToString());
    }
    /// <summary>
    /// Faz o upload de uma imagem para a tabela de imagens.
    /// </summary>    
    protected void Carregar_Click(object sender, EventArgs e)
    {
        SqlConnection conexao = null;
        string resultadoString = "Bug: resultadoString com valor não atribuído.";
 
        try
        {                        
            SqlCommand comando;
 
            //Instancia uma conexão através do construtor que recebe a string de 
            //conexão como parâmetro.
            conexao = RetornarConexaoComSqlServer();
 
            //Abre conexão.
            conexao.Open();
 
            //Cria comando a partir da conexão.
            comando = conexao.CreateCommand();
 
            //Cria instrução SQL-Insert.
            comando.CommandText = "INSERT INTO imagem (imagem_conteudo) VALUES (@conteudo)";
 
            //Atribui valor dos parâmetros.
            comando.Parameters.Add("@conteudo", SqlDbType.Image);
            comando.Parameters["@conteudo"].Value = 
                (object)CarregadorDeArquivoPrincipal.FileBytes;
 
            //Tenta executar o insert.
            resultadoString = comando.ExecuteNonQuery()
                + " tupla(s) afetada(s).";
 
            //Coloca cor da mensagem em azul.
            Resultado.ForeColor = System.Drawing.Color.Blue;
        }
        catch (Exception ex)
        {
            //Caso ocorra algum problema, mostre a mensagem em resultadoString. 
            resultadoString =
                "Impossível carregar imagem: "
                + ex.Message;
 
            //Coloca cor da mensagem em vermelho.
            Resultado.ForeColor = System.Drawing.Color.Red;
        }
        finally
        {
            //Fecha conexão se aberta.
            if (conexao != null
                &&
                conexao.State != ConnectionState.Closed)
                conexao.Close();
 
            //Mostra o resultado acompanhado da data e hora correntes.
            Resultado.Text = 
                DateTime.Now.ToShortDateString()
                + " "
                + DateTime.Now.ToShortTimeString()
                + ": "
                + resultadoString;
 
            //Manda re-associar grid view (útil em caso de alterações por terceiros ou,
            //pela carga de uma figura).
            AssociarGridView();
        }
    }
    /// <summary>
    /// Envia arquivo selecionado para usuário.
    /// </summary>        
    protected void Album_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        try
        {
            SqlConnection conexao = RetornarConexaoComSqlServer();
 
            //Usa o adaptador de dados para carregar as informações no 
            //agrupamento de dados.
            SqlDataAdapter adaptador = new SqlDataAdapter(
                "SELECT imagem_conteudo FROM imagem WHERE imagem_id = "
                + ((int)Album.DataKeys[e.NewSelectedIndex].Value).ToString()
                , conexao);
            DataSet dataSet = new DataSet();
            adaptador.Fill(dataSet);
 
            //Envia de "forma bruta" os dados para o browser.
            if (dataSet.Tables.Count > 0
                &&
                dataSet.Tables[0].Rows.Count > 0)
            {
                Response.Clear();
                Response.ContentType = "image/bmp";
                Response.BinaryWrite(
                    (byte[])dataSet.Tables[0].Rows[0]["imagem_conteudo"]);
                Response.Flush();
                Response.End();
            }            
        }
        catch (Exception ex)
        {
            Resultado.Text =
                "Impossível retornar imagem para usuário. "
                + ex.Message;
        }
    }
}

Script do Banco de Dados

CREATE DATABASE [lpac2]
GO
USE lpac2
GO
CREATE TABLE [dbo].[imagem]
(
	[imagem_id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
	[imagem_conteudo] [image] NOT NULL,
)
GO