VB
.NET
-
Inserindo imagens em um banco de dados MySQL - I
![]() |
Neste artigo eu vou mostrar como podemos inserir imagens em um banco de dados MySQL usando a linguagem VB .NET em um projeto Windows Forms. |
Nível : Básico
Podemos incluir imagens em qualquer banco de dados relacional usando a linguagem VB .NET e hoje a vítima vai ser o MySQL.
Vou fazer uma lista dos recursos que você vai precisar:
Primeiro você tem que ter o banco de dados MySQL instalado na sua máquina local e para isso você vai ter que baixá-lo da internet.
Agora atenção, você deve baixar a versão Community Server que é grátis, então baixe neste link: http://dev.mysql.com/downloads/mysql/
Você vai precisar de uma ferramenta para administrar o MySQL, criar o banco de dados, as tabelas e realizar outras tarefas. Pegue o MySQL Workbench neste link: http://dev.mysql.com/downloads/workbench/
Para poder acessar o MySQL a partir da plataforma .NET você vai precisar do MySQL Connector/NET que pode ser baixado aqui : http://dev.mysql.com/downloads/connector/net/
Você então vai ter que baixar e instalar esses recursos no seu computador antes de poder fazer qualquer outra tarefa.
Recursos usados
Visual Studio 2013 Express for windows desktop
MySQL
MySQL WorkBench
MySQL Connector/Net
Criando o banco de dados e a tabela de Usuarios
Vamos começar criando o banco de dados e a tabela que iremos usar no projeto usando a ferramenta MySQL WorkBench.
Abrindo a ferramenta será apresentada a seguinte janela:
Observe que a janela já exibe uma instância local do MySQL instalado com o usuário root e o servidor localhost e a porta 3306.
Clicando nesta figura será solicitada a senha de acesso a instância local deste MySQL :
Acessando a instância veremos um menu com várias opções na parte superior esquerda e a área SCHEMAS, ou banco de dados, na parte inferior esquerda:
Para criar um novo banco de dados clique com o botão direito do mouse sobre a área SCHEMAS e a seguir clique em Create Schema...:
Informe o nome escola e clique no botão Apply;
Será apresentando o Script que irá criar o banco de dados; clique novamente em Apply;
Você verá na área SCHEMAS (após dar um Refresh) o banco de dados escola criado;
Para criar uma tabela neste banco de dados, expanda os objetos e clique com o botão direito do mouse sobre Tables e a seguir clique em Create Table: (selecione o schema escola antes)
Informe o nome alunos e defina os seguintes campos para esta tabela:
Conforme mostra a figura abaixo.
Note que o campo Id é do tipo chave primária e do tipo auto incremental.
Para criar a tabela clique no botão Apply.
Será apresentada a tabela com o Script gerado,e , para confirmar clique em Apply:
Ao final você deverá visualizar na área SCHEMAS da ferramenta MySQL WorkBench a tabela alunos e suas colunas :
Nota: Para alterar o nome de uma tabela, clique com o botão direito sobre a tabela e a seguir clique em Alter Table.
Como você percebeu criamos um campo chamado imagem na tabela alunos do tipo MEDIUMBLOB para armazenar as imagens.
Para armazenar imagens podemos usar qualquer tipo de dados BLOB com base nas nossas necessidades.
Eu usei o tipo de dados MEDIUMBLOB pois vou armazenar imagens de tamanho médio.
Veja abaixo os demais tipos e suas capacidades de armazenamento:
Tipo de Dados | Capacidade |
BLOB | 255 bytes |
TINYBLOB | 65,535 bytes (64 KB aprox.) |
MEDIUMBLOB | 16,777,215 bytes (16 MB aprox.) |
LONGBLOB | 4,294,967,295 bytes (4 GB aprox.) |
Criando o projeto Windows Forms
Abra o Visual Studio 2013 Express for Windows dekstop e clique em New Project;
A seguir selecione o template Visual Basic -> Windows Forms Application e informe o nome Imagens_MySQL e clique no botão OK;
A seguir a partir da ToolBox inclua os seguintes controles no formulário form1.vb :
1 Label
1 TextBox - name=txtEmail
Label
PictureBox - name=picFoto
Button - name=btnLocalizar
Label
TextBox - name=txtNome
2 Button - name=btnSalvar , name=btnEncerrar
Disponha os controles conforme o leiaute da imagem a seguir:
![]() |
Agora vamos incluir uma referência ao MySQL Connector/Net em nosso projeto.
Vamos fazer isso usando o Nuget e podemos usar o Manager Console e digitar : Install-Package MySql.Data
Ou você pode clicar no menu TOOLS -> Nuget Package Manager -> Manage Nuget Packages for Solution...
E selecionar MySQL.Data na janela - Manage Nuget Packages , clicando no botão Install para instalar a biblioteca no seu projeto:
Agora vamos declarar no formulário form1.vb os namespaces abaixo para acessar as classes dos provedores .NET para o MySQL :
Imports
MySql.Data.MySqlClientVamos definir uma variável no início do formulário para armazenar o nome da imagem selecionada:
Dim
nomeArquivoImagem As StringAgora no evento Click do botão de comando btnLocalizar vamos incluir o código que permite ao usuário selecionar um arquivo imagem:
VB.NET :
Private Sub btnLocalizar_Click(sender As Object, e As EventArgs) Handles btnLocalizar.Click
Try
Dim ofd1 As New OpenFileDialog()
ofd1.Filter = "Imagens | *.jpg"
If ofd1.ShowDialog() = DialogResult.OK Then
nomeArquivoImagem = ofd1.FileName
picFoto.Image = Image.FromFile(ofd1.FileName)
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
C# |
private void btnLocalizar_Click(object sender, EventArgs e)
{
try {
OpenFileDialog ofd1 = new OpenFileDialog();
ofd1.Filter = "Imagens | *.jpg";
if (ofd1.ShowDialog() == DialogResult.OK) {
nomeArquivoImagem = ofd1.FileName;
picFoto.Image = Image.FromFile(ofd1.FileName);
}
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
|
Finalmente no evento Click do botão
btnSalvar temos o código que irá obter as informações e salvar os dados e a
imagem na tabela alunos do banco de dados escola do MySQL:
Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click
Dim _conexaoMySQL As String = "server=localhost;user id=root;password=*******;database=escola"
Dim con As MySqlConnection = New MySqlConnection(_conexaoMySQL)
Dim cmd As MySqlCommand
Dim fs As FileStream
Dim br As BinaryReader
Try
If txtNome.Text.Length > 0 And txtEmail.Text.Length > 0 Then
Dim NomeArquivoFoto As String = nomeArquivoImagem
Dim DadosImagem() As Byte
fs = New FileStream(NomeArquivoFoto, FileMode.Open, FileAccess.Read)
br = New BinaryReader(fs)
DadosImagem = br.ReadBytes(CType(fs.Length, Integer))
br.Close()
fs.Close()
Dim CmdSql As String = "INSERT INTO alunos(nome, email, imagem) VALUES(@Nome, @Email, @Imagem)"
cmd = New MySqlCommand(CmdSql, con)
cmd.Parameters.Add("@Nome", MySqlDbType.VarChar, 100)
cmd.Parameters.Add("@Email", MySqlDbType.VarChar, 150)
cmd.Parameters.Add("@Imagem", MySqlDbType.Blob)
cmd.Parameters("@Nome").Value = txtNome.Text
cmd.Parameters("@Email").Value = txtEmail.Text
cmd.Parameters("@Imagem").Value = DadosImagem
con.Open()
Dim linhasAfetadas As Integer = cmd.ExecuteNonQuery()
If (linhasAfetadas > 0) Then
MessageBox.Show("A imagem foi salva com sucesso !", "Salvar Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Else
MessageBox.Show("Dados incompletos !", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Catch ex As Exception
MsgBox(ex.ToString())
Finally
If con.State = ConnectionState.Open Then
con.Close()
End If
End Try
End Sub
|
A versão C# do código acima é dado a seguir:
private void btnSalvar_Click(object sender, EventArgs e)
{
string _conexaoMySQL = "server=localhost;user id=root;password=*******;database=escola";
MySqlConnection con = new MySqlConnection(_conexaoMySQL);
MySqlCommand cmd = default(MySqlCommand);
FileStream fs = default(FileStream);
BinaryReader br = default(BinaryReader);
try {
if (txtNome.Text.Length > 0 & txtEmail.Text.Length > 0) {
string NomeArquivoFoto = nomeArquivoImagem;
byte[] DadosImagem = null;
fs = new FileStream(NomeArquivoFoto, FileMode.Open, FileAccess.Read);
br = new BinaryReader(fs);
DadosImagem = br.ReadBytes(Convert.ToInt32(fs.Length));
br.Close();
fs.Close();
string CmdSql = "INSERT INTO alunos(nome, email, imagem) VALUES(@Nome, @Email, @Imagem)";
cmd = new MySqlCommand(CmdSql, con);
cmd.Parameters.Add("@Nome", MySqlDbType.VarChar, 100);
cmd.Parameters.Add("@Email", MySqlDbType.VarChar, 150);
cmd.Parameters.Add("@Imagem", MySqlDbType.Blob);
cmd.Parameters("@Nome").Value = txtNome.Text;
cmd.Parameters("@Email").Value = txtEmail.Text;
cmd.Parameters("@Imagem").Value = DadosImagem;
con.Open();
int linhasAfetadas = cmd.ExecuteNonQuery();
if ((linhasAfetadas > 0))
{
MessageBox.Show("A imagem foi salva com sucesso !", "Salvar Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
} else {
MessageBox.Show("Dados incompletos !", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} catch (Exception ex) {
Interaction.MsgBox(ex.ToString());
} finally {
if (con.State == ConnectionState.Open) {
con.Close();
}
}
}
|
Executando o projeto e informando alguns dados e selecionando uma foto teremos o seguinte resultado :
Ao clicar no botão - Salvar Dados - os dados serão salvos e podemos verificar isso abrindo alunos a tabela no MySQL WorkBench e visualizando os dados da tabela:
![]() |
Como esse é um exemplo básico eu coloquei o código de acesso aos dados no formulário mas essa prática deve ser desencorajada.
As boas práticas de programação sugerem que devemos separar o código de acesso aos dados da camada de apresentação e separar as responsabilidades.
Então o mais correto seria criar um outro projeto e nele definir a camada de acesso aos dados com classes para acessar e persistir dados no MySQL.
Que tal fazer isso para se exercitar ?
Veja o meu artigo http://www.macoratti.net/09/08/c_mysql1.htm para ter uma base de como fazer isso.
No próximo artigo irei mostrar como acessar e ler as imagens da tabela alunos.
Pegue o projeto completo aqui:
Imagens_MySQL.zip
E, estando ele
em Jerusalém pela páscoa, durante a festa, muitos, vendo os sinais que fazia,
creram no seu nome.
Mas o mesmo Jesus não confiava neles, porque a todos conhecia;
E não necessitava de que alguém testificasse do homem, porque ele bem sabia o
que havia no homem.
João 2:23-25
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Posso distribuir o MySQL livremente com minhas aplicações VB ?