You are on page 1of 18

C#GerenciamentodebancodedadosMySQLParte01

/DESIGN

/DESENVOLVIMENTO

Eventos:

/BANCODEDADOS

PHPExperience

/MKTDIGITAL

InterCon

DeveloperWeekBH

DevCommerce

/INFRA

Twitter

imasters.com.br > Portal Fruns 7Masters Revista iMastersConsulting Cursosonline Agenda

Facebook

17/07/2015

mercadolivre

/DESENVOLVIMENTO

C#Gerenciamentodebanco
dedadosMySQLParte01
JosCarlosMacorattiem.NET

Compartilhar

...

Tweetar

...

Google+

Linkedin

...

Neste artigo eu vou mostrar como gerenciar um banco de dados MySQL


efetuando as
operaes de acesso, seleo, incluso, alterao e
excluso usando a linguagem C# e ADO .NET.

Vamos trabalhar usando a arquitetura


em 3 camadas definindo assim:

A camada de interface : UI
namespace UI
A camada de negcios : BLL
namespace BLL e classe produtoBLL
A camada de acesso a dados :
DAL namespace DAL e classe produtoDAL

Vamos tambm criar a entidade


Produto que ser o objeto do nosso negcio e que possuir 3
propriedades: ID, Nome e Preco representando assim cada coluna da
tabela Estoque. A entidade ter o namespace DTO e a
classe Produto.

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

1/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

Eu poderia criar 3 projetos


distintos, mas para simplificar vou criar as seguintes classes :

produtoBLL contm os mtodos das


regras de negcio; (namespace BLL)
produtoDAL contm os mtodos para
acesso a dados no MySQL; (namespace DAL)
produto contm a classe Produto;
(namespace DTO)
UI representa a nossa
aplicao Windows Forms;

Lembrando que em uma aplicao em


3 camadas temos uma hierarquia de chamadas onde:

A UIchamaaBLLquechamaa
DLL que, por sua vez, acessa os dados e retorna os
objetos;

Nunca dever haver uma chamada


direta da UI para a DAL e vice-versa.(Quando usamos os

controles de acesso a dados vinculados no formulrio, estamos


fazendo o acesso direto da camada de interface para a DAL ou
banco de dados, o que no uma boa prtica.)

As ferramentas usadas so:

Banco de dados MySQL 5.01;


http://dev.mysql.com/downloads/mysql/5.1.html
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

2/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

MySQL Administrator e MySQL


Query Browse http://dev.mysql.com/downloads/gui-tools/5.0.html;
MySQl Connector .NET 6.04;
http://dev.mysql.com/downloads/connector/
SharpDevelop 3.0 ou Visual
Studio C# 2008; http://www.icsharpcode.net/OpenSource/SD/Download/
ou http://www.microsoft.com/express/vcsharp/

Se voc no possuir o MySQL e o Connector .NET para


o MySQL, dever efetuar o dowload e instalar. A instalao simples
basta clicar
no pacote e seguir as orientaes aceitando as configuraes padro.
Veja a
seguir a sequncia de telas principais da instalao:

1-tela inicial de instalao do MySQL

2-Selecione a opo Typical para instalao

3-Verifique o local onde os arquivos sero instalados


http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

3/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

4-Marque a opo para configurar o MySQL

5-Marque a opo Standard Configuration

6-Marque a opo para instalar como um servio e fornea um nome


para o servio. O nome padro MySQL

7-Informe uma senha ao usurio root

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

4/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

8-Clique no boto Execute para processar as opes definidas

Com os componentes instalados, vamos


efetuar as seguintes tarefas:

Criar um banco de dados no


MySQL Chamado Cadastro e uma tabela
chamada Estoque com os campos ID,
NomeePreco;
Criar um novo projeto Windows
Forms no Visual C# 2008 Express ou SharpDevelop;

Embora eu j tenha descrito como


criar um banco de dados no MySQL usando MySQL Administrator vou
resumidamente repetir os passos:

Abra o MySQL Admininistrator,


e, na rea inferior esquerda, onde so exibidos os
esquemas. clique com o boto direito e selecione a
opo: Create New Schema;
Na janela Create new Schema informe o nome do banco de dados, no
nosso caso,
Cadastro, e tecle OK;

Clique sobre o esquema criado e


selecione a opo Create New Table ou clique no boto
Create Table;
A seguir defina o nome da
tabela como Estoque e defina os campos da mesma conforme
a figura abaixo:
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

5/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

A seguir, a partir do menu Tools,


selecione a opo MySQL Query Browse;
Na janela do MySQL Query Browse
digite a instruo INSERT INTO Estoque VALUES
(,Caderno, 1.23) e clique no boto Execute
para incluir um registro na tabela. Repita a operao e
inclua uma borracha com um valor de forma que, ao efetuar
uma instruo SELECT * FROM Estoque, iremos obter o
resultado abaixo:

Neste momento j temos o banco de


dados Cadastro e a tabela Estoque com dois registros.

Abra o SharpDevelop ou o Visual C#


2008 Express e crie um novo projeto do tipo Windows Application
com o nome MySQL_C#;

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

6/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

Devemos incluir a referncia ao


Connector .NET para ter acesso s classes de acesso a dados do
MySQL. Para isso clique sobre o nome do projeto e selecione a
opo Add Reference;

A seguir inclua uma referncia a


dll do MySQL Connector .NET selecionando na pasta onde foi
instalada e clicando no boto Abrir/Open;

No formulrio padro inclua um


controle TabControl e defina dois TabPages:

TabPage1 Text = Cadastro


TabPage2 Text = Lista
tabControl1 Appearence = FlatButtons
(para obter a aparncia conforme a figura abaixo)

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

7/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

Na primeira TabPage inclua os


seguintes controles:

3 controles Label
3 Controles TextBox :txtID,
txtNome e txtPreco
5 controles Button : btnNovo,
btnAltear, btnExcluir, btnExibir e btnProcurar

Na segunda TabPage inclua um


controle DataGridView gdvProdutos.

Acima vemos o leiaute do formulrio


para cada TabPage.

Vamos iniciar criando o arquivo de


classe Produto.cs que ir representar a classe Produto, clicando
no nome do projeto e selecionando a opo Add New Item;

Na janela de templates selecione o


template Class e informe o nome Produto.cs;

A seguir defina o seguinte cdigo nesta classe onde


estamos definindo 3 membros e 3 propriedades da nossa entidade
Produto:

usingSystem

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

8/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

namespaceDTO
{
publicclassProduto
{

int_id

String_nome

Decimal_preco
publicintID
{
get{return_id}
set{_id=value}
}
publicStringNome
{
get{return_nome}
set{_nome=value}
}
publicDecimalPreco
{
get{return_preco}
set{_preco=value}
}
}
}
Neste arquivo criamos a classe
Produto e definimos os membros _id, _nome e _preco e as
propriedades ID, Nome e Preco. Ela ser usada para
transferncia de objetos entre as camadas de interface de
negcio e de acesso a dados.

Agora vamos criar o arquivo de


classe DAL.cs clicando no nome do projeto e selecionando a
opo Add New Item;

Na janela de templates selecione o


template Class e informe o nome DAL.cs;

Os pacotes usados nesta classe


so:

using System;
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

9/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using DTO;

A seguir vamos definir na classe


produtoDAL 6 mtodos conforme exibidos abaixo:

selectListProdutos retorna
uma lista de produtos : List<Produto> com os
produtos selecionados;
selectProdutos retorna um
DataTable com os produtos selecionados;
selectProdutosByID retorna
uma entidade Produto para um produto selecionado pelo seu
cdigo (id);
insertProduto inclui um novo
produto;
updateProduto atualiza um
produto existente;
deleteProduto exclui um
produto existente;

Vejamos o cdigo da classe produtoDAL:

Declaramos duas variveis que sero visveis na


classe:

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

10/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

String
_conexaoMySQL = ;
MySqlConnection con = null;

O construtor da classe ProdutoDAL define a


string de conexo com o banco de dados MySQL:

publicprodutoDAL()
{

_conexaoMySQL=
"server=localhostuserid=rootpassword=passworddatabase=cadastr
}
onde temos:

server localhost, pois estou acessando o


MySQL instalado na minha mquina local;
id = root, pois estou usando o usurio root;
password = password, pois essa foi a senha definida para o usurio root;
database=cadastro, pois esse o banco de dados que criamos no
MySQL;

Agora vejamos os mtodos:

1- SelectProdutos Usada para exibir todos


os produtos do estoque;

publicDataTableselectProdutos(){
try{
Stringsql="SELECT*FROMEstoque"
con=newMySqlConnection(_conexaoMySQL)
MySqlCommandcmd=newMySqlCommand(sql,con)
MySqlDataAdapterda=newMySqlDataAdapter()
da.SelectCommand=cmd
DataTabledt=newDataTable()
da.Fill(dt)
returndt
}
catch(Exceptionex)
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

11/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

{
throwex
}
}
2- selecteProdutoByID() Usada para
retornar uma entidade Produto representando um nico produto pelo seu
cdigo (id);

publicProduto
selectProdutoByID(intid)
{
try{
Stringsql="SELECT*FROMEstoqueWHEREid=@id"
con=newMySqlConnection(_conexaoMySQL)
MySqlCommandcmd=newMySqlCommand(sql,con)
cmd.Parameters.AddWithValue("@id",id)
con.Open()
MySqlDataReaderdr
Produtoproduto=newProduto()
dr=cmd.ExecuteReader(CommandBehavior.CloseConnection)
while(dr.Read()){
produto.ID=Convert.ToInt32(dr["id"])
produto.Nome=dr["Nome"].ToString()
produto.Preco=Convert.ToDecimal(dr["Preco"])
}
returnproduto
}
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

12/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

catch(Exceptionex)
{
throwex
}
}
3- selectListProdutos() Usada para
retornar uma lista de objetos Produto representando uma coleo de
produtos.

publicList<Produto>selectListProdutos()
{
try{
using(MySqlConnectionconn=newMySqlConnection(_conexaoM
using(MySqlCommandcommand=newMySqlCommand("Selec
{
conn.Open()
List<Produto>listaProdutos=newList<Produto>()
using(MySqlDataReaderdr=command.ExecuteReader())
{
while(dr.Read()){
Produtoproduto=newProduto()
produto.ID=(int)dr["id"]
produto.Nome=(String)dr["Nome"]
produto.Preco=Convert.ToDecimal(dr["Preco"])
listaProdutos.Add(produto)
}
}
returnlistaProdutos
}
}
}
catch(Exceptionex){
thrownewException("Erroaoacessarestoque"+ex.Message)
}
}

4- insertProduto() Usada para incluir um


novo produto no estoque;

publicvoidinsertProduto(Produtoproduto){
try{
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

13/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

Stringsql="INSERTINTOEstoque(nome,preco)VALUES(@nom

con=newMySqlConnection(_conexaoMySQL)

MySqlCommandcmd=newMySqlCommand(sql,con)

cmd.Parameters.AddWithValue("@nome",produto.Nome)

cmd.Parameters.AddWithValue("@preco",produto.Preco)

con.Open()
cmd.ExecuteNonQuery()

catch(Exceptionex)

throwex

finally{

con.Close()

}
}
5- updateProduto() Usada para atualizar os
dados de um produto no estoque;

publicvoidupdateProduto(Produtoproduto){
try{
Stringsql="UPDATEEstoqueSETnome=@nome,preco=@preco
con=newMySqlConnection(_conexaoMySQL)

MySqlCommandcmd=newMySqlCommand(sql,con)

cmd.Parameters.AddWithValue("@id",produto.ID)
cmd.Parameters.AddWithValue("@nome",produto.Nome)

cmd.Parameters.AddWithValue("@preco",produto.Preco)

con.Open()
cmd.ExecuteNonQuery()

catch(Exceptionex)

throwex
}

finally{

con.Close()

}
}
6- deleteProduto() Usada para excluir um
produto no estoque;

publicvoiddeleteProduto(Produtoproduto){
try{

Stringsql="DELETEFROMEstoqueWHEREid=@id"

MySqlConnectioncon=newMySqlConnection(_conexaoMySQL)
http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

14/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

MySqlCommandcmd=newMySqlCommand(sql,con)

cmd.Parameters.AddWithValue("@id",produto.ID)

con.Open()
cmd.ExecuteNonQuery()

catch(Exceptionex)

throwex

finally{

con.Close()

}
}
Eu mantive o cdigo o mais simples possvel usando
ado .net clssica e instrues SQL. Poderia ter usado stored procedures,
o que
seria mais indicado.

Esta a nossa camada de acesso a dados e sua


responsabilidade acesssar e persistir dados no MySQL, s isso. Veja
abaixo uma
figura onde temos uma viso da nossa soluo:

Aguarde no prximo artigo a continuao onde irei


criar a camada de negcios BLL:

C#
GerenciamentodebancodedadosMySQLParte02.
NEWSLETTER

Eu sei, apenas Visual C#, mas eu gosto

Fiquepordentrodetodasasnovidades,eventos,
cursosemuitomais
seunome

Mensagemdoanunciante:

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

15/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01
A Mundipagg lana a inovadora API em REST, garantindo flexibilidade e simplicidade na integrao. Conhea as nossas
seuemail
funcionalidades.

ENVIAR

quintafeira,17desetembrode2009

Compartilhar

...

Tweetar

...

Google+

...

Linkedin

JosCarlosMacoratti
refernciaemVisualBasicnoBrasileautordoslivros"AprendaRpido:ASP"e
"ASP,ADOeBancodeDadosnaInternet".Mantenedordositemacoratti.net.

leiaagora

Interoperabilidadena
prticaParte01
DiegoPachecoem.NET

6comentrios

COMENTE TAMBM

timoartigo!Quandoviraparte2?
Responder

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

PatrciaSouza
17desetembro
de2009s
15:30

16/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01

10deabrilde
2010s11:40

Nomanjonadade.neteC#masestoutentandoaprender,
seguitodosospassosdesteartigoenadafunciona,nem
compila!!!nogostei!!!
Responder

Csar1demaiode2011s18:26

Pois,notasequevocnoentendenadade.NET.

Repareiqueapenasnacriaodalistvcusouoartificio
using
enoseparouastringSQL.

25dejunhode
2010s14:40

vcpegouessapartepronta?ouapenasesqueceude
organizarcomoasoutras?
timotuto!
Responder

NopoderiafazerumtutorialexemplificandoesteCRUDcom
c#+MySQLmasemvisualstudio?
AndreLC
14deagosto
de2011s
21:49

Obrigado.
Abrao!
Responder

Comoeucolocoasconfiguraesdobancodedadoscomo
ip,porta,db,user,senhaemumoutroarquivode
configuraoporexemploemumarquivo.iniousuariovaila
ealteraasconfiguraesdoservidor.

joseluiz
21dejaneiro
de2012s
14:50

Responder

OseuendereodeemailnoserpublicadoCamposobrigatriossomarcados*

Nome

Email

um

=6

Comente

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

17/18

17/07/2015

C#GerenciamentodebancodedadosMySQLParte01
ENVIARCOMENTRIO

Este projeto mantido e patrocinado pelas empresas:

Hospedado por:

Desenvolvimento

Design

Bancodedados

MarketingDigital

Agenda

CursosOnline

Agile

3dsmax

Interbase

ContedoDigital

Ajax
AnlisedeDados

Acessibilidade
Arquiteturade
Informao

MongoDB
MySQL

Ecommerce
EmailMarketing

Frum

InterCon

7Masters

RevistaiMasters

Oracle
PostgreSQL

Mercado
PublicidadeOnline

SQLServer

RedesSociais
Tendncias

CakePHP
CSS
FrontEnd
HTML
Java
JavaScript

DesignResponsivo
Games
Usabilidade
UserExperience

PHP
Python
Ruby

InfraeCloud
CloudComputing
Linux

Mobile

MicrosoftAzure
Segurana

iPhone&iPad

Android

SiteBlindado

http://imasters.com.br/artigo/14290/csharp/c_gerenciamento_de_banco_de_dados_mysql_parte_01/

LinkedIn


Plus

iMastersExpert(englishblog)

Google

Faleconosco

Facebook

PolticadePrivacidade

Twitter

SobreoiMasters

18/18

You might also like