C#
- Armazenando e Recuperando Imagens do SQL Server
![]() |
Neste artigo vamos armazenar e recuperar imagens de um banco de dados SQL Server. |
Eu já escrevi alguns artigos sobre o assunto, todos eles usando a linguagem VB .NET e hoje eu volto ao assunto mostrando como fazer isso usando a linguagem C#.
Vou usar os seguintes recursos:
Criando o projeto Windows Forms
Abra o Visual C# 2010 Express Edition e no menu File clique em New Project;
Selecione o template Windows Forms Application e informe o nome TratandoImagens_SQLServer;
![]() |
A seguir inclua, a partir da ToolBox, os seguintes controles no formulário form1.cs:
O leiaute do formulário deverá se parecer com o da figura abaixo:
![]() |
Vamos definir os seguintes namespaces no formulário:
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
Temos que definir também as seguintes variáveis logo após a declaração do formulário:
private long
tamanhoArquivoImagem = 0;
private byte[] vetorImagens;
private SqlConnection conexaoSQLServer;
SqlCommand sqlcmd = default(SqlCommand);
Criando o banco de dados no SQL Server
Vamos criar o banco de dados e tabela no SQL Server.
Eu poderia fazer isso usando o SQL Server Management Studio mas vou usar o próprio ambiente do Visual C# 2010 Express Edition;
Abra a janela DataBase Explorer e clique com o botão direito em Data Connections clicando a seguir em Add Connection;
![]() |
Na janela Add Connection , clique no botão Change e altere o Data Source para : Microsoft SQL Server Database File;
Obs: Esta janela poderá exibir outras opções de Data Source mas eu escolhi trabalhar com um banco de dados anexado ao meu SQL Server Local;
![]() |
Informe o nome do banco de dados, no exemplo o nome usado foi Cadastro.mdf e clique no botão OK;
![]() |
Uma caixa de diálogo irá surgir informando que o banco de dados não existe e se você deseja criá-lo. Confirme e clique no botão Sim para criar o banco de dados.
Você verá na janela DataBase Explorer o banco de dados Cadastro;
Clique com o botão direito no item Tables e a seguir clique em Add New Table;
![]() |
Crie a tabela Imagens definindo os campos:
![]() |
Assim temos o banco de dados Cadastro.mdf e a tabela Imagens criadas e prontas para serem usadas.
Recuperando imagens do banco de dados
A primeira coisa que vamos fazer é acessar a tabela Imagens do banco de dados e exibir o seu conteúdo no controle DataGridViw (gdvImagens);
Faremos isso quando o usuário clicar no botão Ativar, visto que ele será forçado a clicar neste botão para ativar os botões de comando do formulário;
No evento Click do botão Ativar inclua o código abaixo:
private void btnAtivar_Click(object sender, EventArgs e)
{
//cria uma instãncia do objeto SqlConnection
conexaoSQLServer = new SqlConnection(txtStringConexaoBD.Text);
//obtem os dados da tabela imagens
getImagensSQLServer(conexaoSQLServer);
//ativa os botões de comando
btnCarregarImagem.Enabled = true;
btnRetornarImagemBD.Enabled=true;
btnSalvarImagemBD.Enabled = true;
btnAtivar.Enabled = false;
}
|
A rotina getImagensSQLServer obtém as imagens do SQL Server e tem o seguinte código:
void getImagensSQLServer(SqlConnection conexaoSQLServer)
{
try
{
//Inicializar o SQL adapter.
SqlDataAdapter ADAP = new SqlDataAdapter("Select Id,descricao,imagem from Imagens", conexaoSQLServer);
//Inicializa o Dataset.
DataSet DS = new DataSet();
//Preenche o dataset com a tabela Imagens
ADAP.Fill(DS, "Imagens");
//preenche o datagridviewe com o dataset.
gdvImagens.DataSource = DS.Tables["Imagens"];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
|
No evento Click da célula do DataGridView vamos definir o código para que os controles TextBox para o código e descrição da imagem sejam limpos e que o código da imagem seja obtido da célula do Grid e exibido no controle TextBox que exibe o código da imagem;
private void gdvImagens_CellClick(object sender, DataGridViewCellEventArgs e)
{
//obtem o codigo da imagem e exibe no controle textbox
txtCodigoImagem.Text = (gdvImagens.Rows[e.RowIndex].Cells["id"].Value).ToString();
txtDescricaoImagem.Text = "";
}
|
Dessa forma o usuário poderá recuperar uma imagem do banco de dados usando o código com o qual ela foi salva.
Para salvar uma nova imagem no banco de dados o usuário deverá clicar no botão - Carregar Imagem.
Isso abrirá uma caixa de diálogo para que uma imagem seja selecionada e exibida no controle PictureBox (picImagem);
O código que faz isso esta no evento Click do botão - Carregar Imagem - conforme mostrado a seguir:
private void btnCarregarImagem_Click(object sender, EventArgs e)
{
CarregaImagem();
txtCodigoImagem.Text = "";
txtDescricaoImagem.Text = "";
}
|
A rotina CarregaImagem() é quem realmente faz o serviço de obter o nome da imagem e exibi-la no PictureBox. O seu código é dado abaixo:
protected void CarregaImagem()
{
try
{
this.openFileDialog1.ShowDialog(this);
string strFn = this.openFileDialog1.FileName;
if (string.IsNullOrEmpty(strFn))
return;
this.picImagem.Image = Image.FromFile(strFn);
FileInfo arqImagem = new FileInfo(strFn);
tamanhoArquivoImagem = arqImagem.Length;
FileStream fs = new FileStream(strFn, FileMode.Open,FileAccess.Read, FileShare.Read);
vetorImagens = new byte[Convert.ToInt32(this.tamanhoArquivoImagem)];
int iBytesRead = fs.Read(vetorImagens, 0, Convert.ToInt32(this.tamanhoArquivoImagem));
fs.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
Salvando uma imagem no SQL Server
Para salvar uma nova imagem na tabela Imagens do banco de dados Cadastro.mdf o usuário terá que carregar uma nova imagem e fornecer uma descrição para ela.
Ele não vai precisar informar o código da imagem pois o campo id é do tipo identity sendo assim incrementado automaticamente pelo SGBD.
O código que salva a imagem esta no evento Click do botão - Salvar imagem no banco de dados:
| private void btnSalvarImagemBD_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtDescricaoImagem.Text)) { MessageBox.Show("Informe a descrição da imagem", "Código da Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } try { this.conexaoSQLServer.Open(); this.sqlcmd = new SqlCommand(); sqlcmd.Connection = conexaoSQLServer; if (sqlcmd.Parameters.Count == 0) { this.sqlcmd.CommandText = "INSERT INTO Imagens(descricao,imagem) values(@descricao,@imagem)"; this.sqlcmd.Parameters.Add("@descricao", System.Data.SqlDbType.VarChar, 50); this.sqlcmd.Parameters.Add("@imagem", System.Data.SqlDbType.Image); } this.sqlcmd.Parameters["@descricao"].Value = this.txtDescricaoImagem.Text; this.sqlcmd.Parameters["@imagem"].Value = this.vetorImagens; int iresultado = this.sqlcmd.ExecuteNonQuery(); if (iresultado <= 0) MessageBox.Show("Falha ao incluir imagem no banco de dados."); getImagensSQLServer(conexaoSQLServer); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { this.conexaoSQLServer.Close(); } } |
Recuperando uma imagem no SQL Server
Para recuperar uma imagem do banco de dados o usuário deverá informar o seu código. Ele pode selecionar o código a partir do DataGridView ou informando manualmente.
O código que recupera a imagem e a exibe no PictureBox esta no evento Click do botão - Obter imagem do banco de dados:
| private void btnRetornarImagemBD_Click(object sender, EventArgs e) { if (txtCodigoImagem.Text == string.Empty) { MessageBox.Show("Informe o código da imagem no Banco de dados", "Código da Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } try { SqlCommand cmdSelect = new SqlCommand("select imagem from Imagens where id=@ID", this.conexaoSQLServer); cmdSelect.Parameters.Add("@ID", SqlDbType.Int, 4); cmdSelect.Parameters["@ID"].Value = this.txtCodigoImagem.Text; this.conexaoSQLServer.Open(); byte[] vetorImagem = (byte[])cmdSelect.ExecuteScalar(); string strNomeArquivo = Convert.ToString(DateTime.Now.ToFileTime()); FileStream fs = new FileStream(strNomeArquivo, FileMode.CreateNew, FileAccess.Write); fs.Write(vetorImagem, 0, vetorImagem.Length); fs.Flush(); fs.Close(); picImagem.Image = Image.FromFile(strNomeArquivo); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { this.conexaoSQLServer.Close(); } } |
Executando o projeto incluir e recuperar imagens na tabela Imagens conforme mostra o resultado obtido na figura abaixo:
![]() |
Pegue o projeto completo aqui:
TratandoImagens_SQLServer.zip
Rom 15:4
Porquanto, tudo que dantes foi escrito, para nosso ensino foi escrito, para que, pela constância e pela consolação provenientes das Escrituras, tenhamos esperança.Referências: