CSharp: ExemploAspAdo
From AdonaiMedrado.Pro.Br
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