You are on page 1of 35

Neste artIgo eu vou mostrar (novcmente) como gerencIar um banco

de dados $" efetuando as operações /e ccesso, selecõo, ìnclµsõo
, clterccõo e exclµsõo usando a IInguagem C# e A0D .NET.
'amos trabalhar usando a arquItetura em J camadas defInIndo assIm:
O camada de Interface : UÌ · ncmespcce 0l
O camada de negocIos : 8LL · ncmespcce 8LL e clcsse
pro/µto8LL
O camada de acesso a dados : 0L · ncmespcce 0AL e clcsse
pro/µto0AL
'amos também crIar a entIdade Produto que será o objeto do nosso
negocIo e que possuIrá J proprIedades: Ì0, Nome e
Preco representando assIm cada coluna da tabela Estoque.
entIdade terá o namespace 0TD e a classe Produto.
u poderIa crIar J projetos dIstIntos mas para sImplIfIcar vou crIar as
seguIntes classes :
O 5rodutoß · contém os métodos das regras de
negocIo; ncmespcce 8LL)
O 5roduto0A · Contém os métodos para acesso a dados no
|yS0L; ncmespcce 0AL)
O 5roduto · contém a classe Produto; ncmespcce 0TD)
O & · representa a nossa aplIcação WIndows Forms;
Lembrando que em uma aplIcação em J camadas temos uma
hIerarquIa de chamadas onde :
& chama a ß que chama a 0 que por sua vez acesso os dados
e retorna os objetos;
Nunca deverá haver uma chamada dIreta da UÌ para a 0L e vIce·
versa.("µcn/o µscmos os controles /e ccesso c /c/os vìncµlc/os no
formµlcrìo estcmos fczen/o o ccesso /ìreto /c ccmc/c /e ìnterfcce
pcrc c 0AL oµ bcnco /e /c/os o qµe nõo é µmc boc prctìcc.)
s ferramentas usadas são:
O 8anco de dados |yS0L
5.01; http://dev.mysql.com/downloads/mysql/5.1.html
O |yS0L dmInIstrator e $" "uer ßrowse ·
http://dev.mysql.com/downloads/guI·tools/5.0.html;
O |yS0L Connector .N%
6.04; http://dev.mysql.com/downloads/connector/
O Sharp0evelop J.0 ou Vìsual Studìo C#
2008; http://www.Icsharpcode.net/DpenSource/S0/0ownload
/ ou http://www.mIcrosoft.com/express/vcsharp/
Se vocë não possuIr o $" e o Connector .NET para o |yS0L
deverá efetuar o downIoad e Instalar. Instalação é sImples basta
clIcar no pacote e seguIr as orIentações aceItando as confIgurações
padrão. 'eja a seguIr a sequëncIa de telas prIncIpaIs da Instalação:

1·tela InIcIal de Instalação do |yS0L
2·SelecIone a opção T5IcaI para
Instalação

J·'erIfIque o local onde os arquIvos serão
Instalados
4·|arque a opção para confIgurar o
|yS0L

5·|arque a opção $tandard
ConfIguratIon
6·|arque a opção para Instalar como um
servIço e forneça um nome para o
servIço. D nome padrão é $"

·Ìnforme uma senha ao usuárIo root
·ClIque no botão Execute para processar
as opções defInIdas
Com os componentes Instalados vamos efetuar as seguIntes tarefas:
O CrIar um banco de dados no |yS0L Chamado Cadastro e uma
tabela chamada Estoque com os campos 0, Nome e Preco;
O CrIar um novo projeto WIndows Forms no 'IsuaI C# 2008
Ex5ress ou $har50eveIo5;
mbora eu já tenha descrIto como crIar um banco de dados no |yS0L
usando |yS0L dmInIstrator vou resumIdamente repetIr os passos:
O bra o $" AdmInInIstrator, e, na área InferIor esquerda,
onde são exIbIdos os esquemas. clIque com o botão dIreIto e
selecIone a opção : Create New $chema;
O Na janela Create new $chema e Informe o nome do banco de
dados , no nosso caso, Cadastro, e tecle DK;
O ClIque sobre o esquema crIado e selecIone a opção Create New
TabIe ou clIque no botão Create TabIe;
O seguIr defIna o nome da tabela como Estoque e defIna os
campos da mesma conforme a fIgura abaIxo:

O seguIr a partIr do menu TooIs selecIone a opção $"
"uer ßrowse;
O Na janela do $" "uer ßrowse dIgIte a Instrução ÌNS#%
ÌN%D stoque 'LUS (',¨Caderno¨, 1.2J) e clIque no
botão Execute para IncluIr um regIstro na tabela. #epIta a
operação e Inclua uma borracha com um valor de forma que ao
efetuar uma Instrução SLC% * F#D| stoque Iremos obter o
resultado abaIxo;
Neste momento já temos o banco de dados Cadastro e a
tabela Estoque com doIs regIstros.
bra o Sharp0evelop ou o 'Isual C# 200 xpress e crIe um novo
projeto do tIpo ìn/ows Applìcctìon com o nome $"*C#;
0evemos IncluIr a referëncIa ao Connector .NET para ter acesso as
classes de acesso a dados do $". Para Isso clIque sobre o nome
do projeto e selecIone a opção Add Peference;
seguIr Inclua uma referëncIa a dll do $" Connector
.NET selecIonando na pasta onde foI Instalado e clIcando no
botão AbrIrlD5en;

No formulárIo padrão Inclua um controle TabControI e defIna
doIs TabPages:
O %abPage1 · %ext = Cadastro
O %abPage2 · %ext = Ista
O tabControI1 - A55earence = FIatßuttons pcrc obter c
cpcrêncìc conforme c f줵rc cbcìxo)

Na prImeIra TabPage Inclua os seguIntes controles:
O J controles Label
O J Controles %ext8ox :txt0, txtNome e txtPreco
O 5 controles 8utton : btnNovo, btnAItear, btnExcIuIr, btnExIbIr
e btnProcurar
Na segunda TabPage Inclua um controle 0ataCrId'Iew ·
gdvProdutos.
cIma vemos o leIaute do formulárIo para cada TabPage.
'amos InIcIar crIando o arquIvo de classe Produto.cs que Irá
representar a classe Produto, clIcando no nome do projeto e
selecIonando a opção Add New tem;
Na janela de templates selecIone o template CIass e Informe o
nome Produto.cs;
seguIr defIna o seguInte codIgo nesta classe onde estamos defInIndo
J membros e J proprIedades da nossa entIdade Produto:
usIng System;

names5ace 0TD
{
5ubIIc cIass Produto
{
Int _Id;
StrIng _nome;
0ecImal _preco;

publIc Int Ì0
{
get {return _Id;]
set {_Id = value;]
]
publIc StrIng Nome
{
get {return _nome;]
set {_nome = value;]
]
publIc 0ecImal Preco
{
get {return _preco;]
set {_preco = value;]
]
]
]
Neste arquIvo crIamos a classe Produto e defInImos os membros *Id,
*nome e *5reco e as proprIedades 0, Nome e Preco. la será usada
para transferëncIa de objetos entre as camadas de Interface de
negocIo e de acesso a dados.
gora vamos crIar o arquIvo de classe 0A.cs clIcando no nome do
projeto e selecIonando a opção Add New tem;
Na janela de templctes selecIone o templcte CIass e Informe o
nome 0A.cs;
Ds pacotes usados nesta classe são:
usIng $stem;
usIng $stem.CoIIectIons.CenerIc;
usIng $stem.0ata;
usIng $qI.0ata.$qICIIent;
usIng 0TD;
seguIr vamos defInIr na classe 5roduto0A 6 métodos conforme
exIbIdos abaIxo:
O seIectIstProdutos · retorna uma lIsta de produtos
: Ist·Produto> com os produtos selecIonados;
O seIectProdutos · retorna um 0ataTabIe com os produtos
selecIonados;
O seIectProdutosß0 · retorna uma entIdade Produto para um
produto selecIonado pelo seu codIgo (Id);
O InsertProduto · IncluI um novo produto;
O u5dateProduto · atualIza um produto exIstente;
O deIeteProduto · excluI um produto exIstente;
'ejamos o codIgo da classe 5roduto0A:
0eclaramos duas varIáveIs que serão vIsiveIs na classe:
$trIng *conexao$" = "";
$qIConnectIon con = nuII;
D construtor da classe Produto0A defIne a strIng de conexão com o
banco de dados $":
publIc produto0L()
{
*conexao$" = ¨server=localhost;user
Id=root;password=password;database=cadastro¨;
]
onde temos:
server · localhost , poIs estou acessando o |yS0L Instalado na mInha
máquIna local;
Id = root , poIs estou usando o usuárIo root;
5assword = pcsswor/ , poIs essa foI a senha defInIda para o usuárIo
root;
database=cadastro, poIs esse é o banco de dados que crIamos no
|yS0L;
gora vejamos os métodos:
1· $eIectProdutos · Usada para exIbIr todos os produtos do estoque;
publIc 0ata%able selectProdutos(){
try{
StrIng sql = "$EECT * FPD Estoque";
con = new |ySqlConnectIon(_conexao|yS0L);
|ySqlCommand cmd = new |ySqlCommand(sql,con);
|ySql0atadapter da = new |ySql0atadapter();
da.SelectCommand = cmd;
0ataTabIe dt = new 0ataTabIe();
da.FIll(dt);
return dt;
]
catch (xceptIon ex)
{
throw ex;
]
]
2· seIecteProdutoß0() · Usada para retornar uma
entIdade Produto representando um unIco produto pelo seu codIgo
(Id);
publIc Produto selectProduto8yÌ0(Int Id)
{
try{
StrIng sql = ¨SLC% * F#D| stoque WH# Id = @Id¨;
con = new |ySqlConnectIon(_conexao|yS0L);
|ySqlCommand cmd = new |ySqlCommand(sql,con);
cmd.Parameters.ddWIth'alue(¨@Id¨,Id);
con.Dpen();
|ySql0ata#eader dr;

Produto produto = new Produto();
dr =
cmd.xecute#eader(Command8ehavIor.CloseConnectIon);

whIle (dr.#ead()) {
produto.Ì0 = Convert.%oÌntJ2(dr[¨Id¨]);
produto.Nome = dr[¨Nome¨].%oStrIng();
produto.Preco = Convert.%o0ecImal(dr[¨Preco¨]);
]
return produto;
]
catch (xceptIon ex)
{
throw ex;
]
]

J· seIectIstProdutos() · Usada para retornar uma lIsta de
objetos Produto representando uma coleção de produtos.
publIc LIst·Produto· selectLIstProdutos()
{
try {
usIng (|ySqlConnectIon conn = new
|ySqlConnectIon(_conexao|yS0L)) {
usIng (|ySqlCommand command = new
|ySqlCommand("$eIect * from Estoque",
conn))
{
conn.Dpen();
Ist·Produto> IIstaProdutos = new
Ist·Produto>();
usIng (|ySql0ata#eader dr =
command.xecute#eader())
{
whIle (dr.#ead()) {
Produto produto = new
Produto();
produto.Ì0 = (Int)dr[¨Id¨];
produto.Nome = (StrIng)
dr[¨Nome¨];
produto.Preco =
Convert.%o0ecImal(dr[¨Preco¨]);
lIstaProdutos.dd(produto);
]
]
return IIstaProdutos;
]
]
]
catch (xceptIon ex) {
throw new xceptIon(¨rro ao acessar
estoque ¨ + ex.|essage);
]
]
4· InsertProduto() · Usada para IncluIr um novo produto no estoque;
publIc voId InsertProduto(Produto produto){
try{
StrIng sql = "N$EPT NTD Estoque (nome,5reco)
'A&E$ (@nome,@5reco)";
con = new |ySqlConnectIon(_conexao|yS0L);
|ySqlCommand cmd = new |ySqlCommand(sql,con);
cmd.Parameters.ddWIth'alue(¨@nome¨,produto.Nome);
cmd.Parameters.ddWIth'alue(¨@preco¨,produto.Preco);
con.Dpen();
cmd.ExecuteNon"uer();
]
catch (xceptIon ex)
{
throw ex;
]
fInally{
con.Close();
]
]
5· u5dateProduto() · Usada para atualIzar os dados de um produto
no estoque;
publIc voId updateProduto(Produto produto){
try{
StrIng sql = ¨&P0ATE Estoque $ET nome= @nome
,5reco=@5reco WHEPE Id = @Id ";
con = new |ySqlConnectIon(_conexao|yS0L);
|ySqlCommand cmd = new |ySqlCommand(sql,con);
cmd.Parameters.ddWIth'alue(¨@Id¨,produto.Ì0);

cmd.Parameters.ddWIth'alue(¨@nome¨,produto.Nome);
cmd.Parameters.ddWIth'alue(¨@preco¨,produto.Preco);
con.Dpen();
cmd.ExecuteNon"uer();
]
catch (xceptIon ex)
{
throw ex;
]
fInally{
con.Close();
]
]
6· deIeteProduto() · Usada para excluIr um produto no estoque;
publIc voId deleteProduto(Produto produto){
try{
StrIng sql = "0EETE FPD Estoque WHEPE Id =
@Id ";
|ySqlConnectIon con = new
|ySqlConnectIon(_conexao|yS0L);
|ySqlCommand cmd = new
|ySqlCommand(sql,con);
cmd.Parameters.ddWIth'alue(¨@Id¨,produto.Ì0);
con.Dpen();
cmd.ExecuteNon"uer();
]
catch (xceptIon ex)
{
throw ex;
]
fInally{
con.Close();
]
]
u mantIve o codIgo o maIs sImples possivel usando 0D .N%
clássIca e Instruções S0L. PoderIa ter usado stored 5rocedures o que
serIa maIs IndIcado.
sta é a nossa camada de acesso a dados e sua responsabIlIdade e
acessar e persIstIr dados no $", so Isso. 'eja abaIxo uma fIgura
onde temos uma vIsão da nossa solução:

stamos usando a arquItetura em J camadas defInIda assIm:
O camada de Interface : UÌ · ncmespcce 0l
O camada de negocIos : 8LL · ncmespcce 8LL e clcsse
pro/µto8LL
O camada de acesso a dados : 0L · ncmespcce 0AL e clcsse
pro/µto0AL
m uma aplIcação em J camadas temos uma hIerarquIa de chamadas
onde :
& chama a ß que chama a 0A que por sua vez acesso os dados
e retorna os objetos;
Nunca deverá haver uma chamada dIreta da UÌ para a 0L e vIce·
versa.("uando usamos os controles de acesso a dados vìnculados
no formulárìo estamos fazendo o acesso dìreto da camada de
ìnterface para a 0AL ou banco de dados o que náo è uma boa
prátìca.)
Nosso projeto possuI a seguInte estrutura:
O 5rodutoß · contém os métodos das regras de
negocIo; ncmespcce 8LL)
O 5roduto0A · Contém os métodos para acesso a dados no
|yS0L; ncmespcce 0AL)
O 5roduto · contém a classe Produto; ncmespcce 0TD)
O & · representa a nossa aplIcação WIndows Forms;
Dnde já Implementamos a classe 5roduto0A na camada 0A.
'amos agora mostrar a defInIção da camada ß onde temos a
classe 5rodutoß. classe 5rodutoß possuI os seguIntes
métodos:
O 0ataTabIe seIecIonaProdutos() - retorna todos os produtos ;
O novoProduto(Produto 5roduto) · IncluI um novo produto;
O aIteraProduto(Produto 5roduto) · altera os dados de um
produto; a
O excIuIProduto(Produto 5roduto) · excluI um produto;
O Ist·Produto> IIstaProdutos() · retorna uma lIsta genérIca de
produtos;
O Produto IIstaProdutoPor0(Int Id) · retorna um unIco produto;
Conforme é mostrado na fIgura a seguIr:
'ejamos o codIgo da classe 5rodutoß:
0evemos declarar os seguIntes namespaces nos Imports:
usIng $stem.CoIIectIons.CenerIc;
usIng $stem;
usIng 0A;
usIng 0TD;
usIng $stem.0ata;
PrecIsamos da referëncIa a camada 0L para acessar os métodos da
classe 5roduto0A e da referëncIa a camada 0TD para acessar as
proprIedades da entIdade Produto. referëncIa aCenerIc deve·se ao
fato de estarmos retornando uma lIsta genérIca de produtos no
método IIstaProdutos();
D construtor da classe Produtoßß esta vazIo:
publIc produto8LL()
{]
gora vejamos os métodos:
1· seIecIonaProdutos() · retorna um datatabIe com todos os
produtos usando o método seIectProdutos() da camada 0A;
publIc 0ata%able selecIonaProdutos()
{
0ata%able tb = new 0ata%able();
try{
dal = new 0L.produto0L();
tb = dal.selectProdutos();
]
catch (xceptIon ex)
{
throw ex;
]
return tb;
]
2· IIstaProdutoPor0() · Usada para retornar uma
entIdade Produto representando um unIco produto pelo seu codIgo
(Id) através do método seIectProdutoß0() da camada 0L;
publIc Produto lIstaProdutoPorÌ0(Int Id)
{
try{
dal = new produto0L();
return dal.selectProduto8yÌ0(Id);
]catch (xceptIon ex) {
throw ex;
]
]
J· IIstaProdutos() · Usada para retornar uma lIsta de objetos
Produto representando uma coleção de produtos usando o
método seIectIstProdutos() da camada 0L;
publIc LIst·Produto·
lIstaProdutos()
{
try{
dal = new produto0L();

return dal.selectLIstProdutos();
]catch (xceptIon ex) {
throw ex;
]
]
4· novoProduto(Produto 5roduto) · Usada para IncluIr um novo
produto no estoque usando o método InsertProduto() da camada
0L;
publIc voId novoProduto(Produto produto){
try{
dal = new 0L.produto0L();
dal.InsertProduto(produto);
]catch (xceptIon ex) {
throw ex;
]
]
5· u5dateProduto() · Usada para atualIzar os dados de um produto
no estoque através do método u5dateProduto() da camada 0L;
publIc voId alteraProduto(Produto produto){
try{
dal = new 0L.produto0L();
dal.updateProduto(produto);
]catch (xceptIon ex) {
throw ex;
]
]
6· deIeteProduto() · Usada para excluIr um produto no estoque vIa
método deIeteProduto() da camada 0L;
publIc voId excluIProduto(Produto produto){
try{
dal = new produto0L();
dal.deleteProduto(produto);
]catch (xceptIon ex) {
throw ex;
]
]
Não estamos efetuando nenhuma valIdação de negocIo nessas classes
devIdo a sImplIcIdade do exemplo mas em um sIstema de produção
aquI teriamos as valIdações referente ao negocIo como restrIções de
valores, cálculo de Impostos, descontos, etc.
0essa forma concluimos a defInIção do codIgo da nossa camada de
negocIos · ß · através da Implementação dos métodos da
classe 5rodutoß.

stamos usando uma arquItetura em J camadas defInIda assIm:
O camada de Interface : & · ncmespcce 0l
O camada de negocIos : ß · ncmespcce 8LL e clcsse
pro/µto8LL
O camada de acesso a dados : 0A · ncmespcce 0AL e clcsse
pro/µto0AL
O classe Produto que representa um produto do nosso dominIo;
nossa camada de Interface será uma aplIcação ìn/ows Forms que
possuI um formulárIo onde através de um
componente TabControI podemos obter uma vIsão com detalhes do
produto e outra vIsão da relação dos produtos cadastrados conforme
as fIguras a seguIr:

Para crIar esta Interface Inclua o controle TabControI a partIr
da TooIßox e na sua proprIedade TabPages clIque no botão ao lado
de CoIIectIon e defIna duas TabPages defInIndo a proprIedade nome
da prImeIra· TcbPc¤e1· como sendo Igual a Cadastro e da segunda ·
TcbPc¤e2· como Ista:

Ìnclua o controle TabControI e defIna a sua proprIedade
A55earence como Igual a FIatßuttons;
Na TabPage Cadastro Inclua os seguIntes controles a
partIr da TooIßox:
· abeI
- Textßox - txt0 , txtNome e txtPreco
- 4 ßutton - btnNovo, btnAIterar, btnExcIuIr, btnExIbI
Na TabPge LIsta Inclua o componente 0ataCrId'Iew -
gdvProdutos

Com Isso temos a nossa Interface pronta para ser usada. Fazemos Isso
acessando os dados da base $" e fazendo uma chamada a nossa
camada de negocIo (8LL) que por sua vez chama a camada de acesso
a dados(0L) que é responsável por recuperar e persIstIr Informação
na base de dados.
'amos usar os eventos dos controles de formulárIo ßutton para fazer
a chamada a nossa classe de negocIo. Para Isso no InicIo do nosso
formulárIo devemos ter as seguIntes referëncIas:
usIng$stem;
usIng$stem.CoIIectIons.CenerIc;
usIng$stem.0rawIng;
usIng$stem.WIndows.Forms;
usIngß;
usIng0TD;
Note que temos que ter uma referëncIa a camada de negocIos ß a
nossa camada 0TD · 0ata Transfer Dbject, onde defInImos a
classe Produto.
'amos começar com o evento CIIck do botão ExIbIr que Irá exIbIr os
dados na TabPage Ista em um 0ataCrId'Iew;

voId 8tnxIbIrClIck(object sender, ventrgs e)
{
try{
8LL.produto8LL bll = new produto8LL();
gdvProdutos.0ataSource =
bll.selecIonaProdutos();
]catch (xceptIon ex){
|essage8ox.Show(¨ rro : ¨ +
ex.|essage.%oStrIng());
]
]
Neste codIgo crIamos uma InstâncIa da classe Produtoß() e em
seguIda usamos o método seIecIonaProdutos() que Irá retornar
um 0ataTabIe e exIbIr os produtos no 0ataCrId'Iew.
'ejamos agora o codIgo do evento CIIck do botão Novo :
voId 8tnNovoClIck(object sender, ventrgs e)
{
Produto p = new Produto();
p.Nome = (StrIng) txtNome.%ext;
p.Preco = Convert.%o0ecImal(txtPreco.%ext);
try{
8LL.produto8LL bll = new produto8LL();
bll.novoProduto(p);
]
catch (xceptIon ex)
{
|essage8ox.Show(¨ rro : ¨ + ex.|essage.%oStrIng());
]
]

PrImeIro crIamos uma InstâncIa da classe Produto e defInImos as
proprIedades Nome e Preco atrIbuIndo a elas os valores fornecIdos
pelo usuárIo através das caIxas de texto txtNome e txtPreco. Não
precIsamos Informar o codIgo do produto(Ì0) poIs o mesmo é
controlado pelo $Cß0 vIsto que defInImos este campo como do
tIpo IdentIt.
seguIr crIamos uma InstâncIa da classe Produtoß()
no ncmespcce 8LL e em seguIda usamos o método novoProduto(p)
para IncluIr um novo produto na base de dados. Dbserve que
passamos como parâmetro um objeto produto e não valores
escalares.
seguIr temos o codIgo assocIado ao evento CIIck do botão AIterar:
voId 8tnlterarClIck(object sender, ventrgs e)
{
Produto p = new Produto();
p.Ì0 = Convert.%oÌntJ2(txtÌ0.%ext);
p.Nome = (StrIng) txtNome.%ext;
p.Preco = Convert.%o0ecImal(txtPreco.%ext);

try{
8LL.produto8LL bll = new produto8LL();
bll.alteraProduto(p);
]
catch (xceptIon ex)
{
|essage8ox.Show(¨ rro : ¨ + ex.|essage.%oStrIng());
]
]

PrImeIro crIamos uma InstâncIa da classe Produto e defInImos as
proprIedades 0, Nome e Preco atrIbuIndo a elas os valores
fornecIdos pelo usuárIo através das caIxas de texto txt0, txtNome e
txtPreco. quI precIsamos Informar o 0 do produto para IdentIfIcar
o produto a ser alterado.
seguIr crIamos uma InstâncIa da classe Produtoß()
no ncmespcce 8LL e em seguIda usamos o método aIteraProduto(p)
para alterar um produto na base de dados. Dbserve que passamos
como parâmetro um objeto produto e não valores escalares.
'ejamos agora o codIgo do evento CIIck do botão ExcIuIr:

voId 8tnxcluIrClIck(object sender, ventrgs e)
{
Produto p = new Produto();
p.Ì0 = Convert.%oÌntJ2(txtÌ0.%ext);
try{
8LL.produto8LL bll = new produto8LL();
bll.excluIProduto(p);
]
catch (xceptIon ex)
{
|essage8ox.Show(¨ rro : ¨ +
ex.|essage.%oStrIng());
]
]
PrImeIro crIamos uma InstâncIa da classe Produto e defInImos a
proprIedade 0 atrIbuIndo a ela o valor fornecIdo pelo usuárIo através
das caIxas de texto txt0.
seguIr crIamos uma InstâncIa da classe Produtoß()
no ncmespcce 8LL e em seguIda usamos o método excIuIProduto(p)
para excluIr um produto na base de dados IdentIfIcado pelo
parâmetro Ì0 Informado.
FInalmente temos o codIgo do botão Procurar:
voId 8tnProcurarClIck(object sender, ventrgs e)
{
Int Id = Convert.%oÌntJ2(txtÌ0.%ext);
Produto p = new Produto();
try{
8LL.produto8LL bll = new produto8LL();
p = bll.lIstaProdutoPorÌ0(Id);
txtNome.%ext = p.Nome;
txtPreco.%ext = p.Preco.%oStrIng();
]
catch (xceptIon ex)
{
|essage8ox.Show(¨ rro : ¨ +
ex.|essage.%oStrIng());
]
]

Neste codIgo obtemos o codIgo do produto (0) a partIr da caIxa de
texto txt0.Text. seguIr crIamos uma InstâncIa da classe Produto()
e Invocamos o método IIstaProdutoPor0usando o Id obtIdo; por fIm
exIbImos os dados do produto no formulárIo.
Com Isso encerramos a nossa aplIcação que acessa o $" usando
uma arquItetura em camadas. plIcamos os conceItos básIcos da
orIentação a objetos mas podemos Ir além, poIs usamos na
camada 0TD uma classe anëmIca sem nenhuma IntelIgëncIa e não
usamos o conceIto de Interface neste projeto. 0eIxo Isso para vocë
como um exercicIo.

u vou usar os seguIntes recursos:
1· MySQL 5.0 (Comunity Server) · 8aIxe e Instale usando as
confIgurações padrão sugerIdas pelo assIstente de Instalação;
2· MySQL Administrator e MySQL Query Browser · 8aIxe e Instale
usando o assIstente;
J· SharpDevelop 2.2 ou Visual C# Express Edition
Para efetuar a conexão usando C# vamos usar provedor 0D .N%
para $" :
4· Download Connector/Net 5.1 (Po/emos µscr tcmbém c versõo 5.2)
CrIando o banco de dados e a tabeIa
pos fazer o download e Instalar as ferramentas IndIcadas vamos
crIar um novo banco de dados chamado Cadastro no |yS0L.
bra o $" AdmInIstrator e clIque em CataIogs;
seguIr clIque com o botão dIreIto do mouse na área onde são
exIbIdos os banco de dados e selecIone Create New $chema;
Ìnforme o nome do banco de dados e a seguIr clIque no botão Create
TabIe;
seguIr Informe o nome da tabela ClIentes e defIna as colunas: Id ,
nome, endereço e emaII conforme abaIxo;
Para IncluIr alguns dados na tabela abra o $" "uer ßrowser e
dIgIte a Instrução N$EPT NTD conforme fIgura abaIxo e clIque em
xecute;
N$EPT NTD CIIentes(nome,endereco, emaII) vaIues ('JanIce', 'Pça
da uz, 54', 'janice@boI.com.br')
D campo Id foI defInIdo como chave prImárIa e Incremental de forma
que o seu valor é atrIbuido pelo |yS0L;
o fInal teremos o banco de dados Cadastro e a tabela CIIentes com
alguns dados no $". stamos prontos para começar.
'amos agora crIar uma nova solução chamada $"Exem5Io usando
o $har50eveIo5.
bra o $har50eveIo5 e no menu ArquIvo selecIone Novo e em
seguIda $oIução;

Na janela Novo Projeto selecIone C#->A5IIcações WIndows e na
janela odeIos marque A5IIcação WIndows e Informe o nome da
solução , no meu caso: $"Exem5Io;

No formulárIo padrão aInForm.cs vamos IncluIr um
controle 0ataCrId a partIr da guIa 0ata na janela de Ferramentas:

Na janela de codIgo vamos prImeIro
declarar os namespaces:

usIng System.0ata;
usIng |ySql.0ata.|ySqlClIent;

seguIr vamos IncluIr o codIgo para
fazer a conexão com o banco de
dados Cadastro no $" , acessar
a tabela CIIentes e exIbIr os seus
dados no 0ataCrId;

5ubIIc class |aInForm : System.WIndows.Forms.Form
{
5rIvate System.WIndows.Forms.0ataCrId m0ataCrId;
5rIvate |ySqlConnectIon mConn;
5rIvate |ySql0atadapter mdapter;
5rIvate 0ataSet m0ataSet;
5ubIIc aInForm()
{
nItIaIIzeCom5onent();

//defIne o dataset
m0ataSet = new 0ata$et();

//defIne strIng de conexao e crIa a conexao
mConn = new $qIConnectIon(¨PersIst SecurIty
Ìnfo=False;server=localhost;database=Cadastro;uId=root;
server=localhost;database=Cadastro;uId=root;pwd=xxxx¨);

tr{
//abre a conexao
mConn.D5en();
]
catch(System.xceptIon e)
{
|essage8ox.$how(e.|essage.To$trIng());
]

//verIfIcva se a conexão esta aberta
If (mConn.State == ConnectIonState.Dpen)
{
//crIa um adapter usando a Instrução S0L para
acessar a tabela ClIentes
mdapter = new $qI0ataAda5ter(¨SLC% *
F#D| ClIentes¨, mConn);
//preenche o dataset vIa adapter
mdapter.FIII(m0ataSet, ¨ClIentes¨);
//atrIbuI a resultado a proprIedade 0ataSource do
0ataCrId
m0ataCrId.0ataSource = m0ataSet;
m0ataCrId.0ata|ember = ¨ClIentes¨;
]
]
No codIgo acIma eu vou falar um pouco sobre a strIng de conexão
usada. le é defInIda dessa forma para o provedor $"
ConnectorlNet (.NET).
mConn = new $qIConnectIon( PersIst $ecurIt nfo=FaIse;
"$erver=IocaIhost;" +
"0ataßase=Cadastro;"+
"&Id=root;" +
"Pwd=xxx;");
Um objeto $qIConnectIon representa uma sessão para uma fonte
de dados $". 0uando crIamos uma
InstâncIa $qIConnectIon todas as proprIedades são defInIdas para
os seus valores InIcIaIs. seguIr temos os valores padrão no
construtor:
Propriedades Valor Inicial
ConnectIon$trIng em5t strIng ("")
ConnectIonTImeout 15
0atabase em5t strIng ("")
0ata$ource em5t strIng ("")
$erver'ersIon
em5t strIng ("")

D atrIbuto PersIst $ecurIt nfo para uma strIng de conexão
especIfIca se a fonte de dados pode persIstIr uma Informação segura
como as credencIaIs de autentIcação do usuárIo. D valo padrão é
mantIdo como FaIse.

Se PersIst $ecurIt nfo for defInIdo como FaIse e a conexão foI
aberta , o valor retornado pela strIng de conexão não Irá exIbIr a
chave nem a senha.

Se o valor for defInIdo como True a Informação da conexão ·
IncluIndo a senha · pode ser obtIda pela consulta a conexão ,
permItIndo assIm uma forma de acesso não confIável as Informações
do usuárIo quando a conexão for persIstIda.

proprIedade $erver(0ata$ource) IndIca o nome ou endereço de
rede da InstâncIa do |yS0L com o qual será feIta a conexão.
|ultIplas InstâncIas podem ser defInIdas separadas por E.

proprIedade 0ataßase defIne o nome do banco de dados atual a ser
usado apos a conexão ser aberta. la não é atualIzada
dInamIcamente, desta forma, se vocë alterar o banco de dados
usando uma Instrução S0L poderá ocorrer um erro. Para alterar o
banco de dados use o método Change0ataßase para refletIr o novo
banco de dados.

proprIedade &Id representa a conta que será usada para acessar o
|yS0L.

proprIedade Pwd representa a senha da conta que esta sendo usada
para o logIn no |yS0L.

pos encerrar o trabalho com a conexão o
objeto $qIConnectIon não é fechado, e , por Isso vocë deve fechar
a conexão explIcItamente chamando $qIConnectIon.CIose ou
$qIConnectIon.0Is5ose.

Para fechar a conexão sobrescrevemos o método 0Is5ose conforme
abaIxo:

5rotected overrIde voId 0Is5ose(booI dIsposIng)
{
If (dIsposIng)
{
If (mConn.State == ConnectIonState.Dpen)
{
mConn.CIose();
]
]
base.0Is5ose(dIsposIng);
]

o usar o comando Dpen o $qIConnectIon tenta obter uma
conexão a partIr do pool de conexão , se não exIstIr uma conexão
dIsponivel, será estabelecIda uma nova conexão com uma InstâncIa
do |yS0L.

mConn.D5en();

o executar o projeto Iremos obter o seguInte resultado no controle
0ataCrId;

ste foI apenas uma pequena Introdução ao acesso a dados
com $" e C#. guarde em breve artIgos maIs avançados...

Um bom estudo para vocë...

Pegue o projeto completo aquI: MySQLExemplo.zip

02-7,3/46:002:2,,5.,402.,2,/,890248:2, 07,76:,/0.,2,/,843/0 &.,2,,6:0.,2,,6:05478:,;0,.088448/,/48 0709473,484-0948 :3.,/0;07E,;07:2,.,2,/,/709,/,&5,7,,0;.0
;078, ":,3/4:8,24848.4397408/0,.0884,/,/48;3.:,/4834 1472:E74089,2481,03/44,.0884/7094/,.,2,/,/039071,.0 5,7,,4:-,3.4/0/,/4846:034F:2,-4,57E9.,  81077,2039,8:8,/,884
O O O O 

,3.4/0/,/48$"  995

286 .42./0.

/8./434.

286.

9470$"":077480 995.  92 $"/23897.

.

/0. 286 .42.

/434./8.

: 9448.

947 %  995. 92 $"4330.

.

/0.42. 286 .

/8./434.

.947.4330.

750. $.$9:/4  995.045 4:'8:.

.

8.4/0 309.75. .

503$4:7.0.

$.

434./ .

4:995.

.

42. 2.748419 .

057088.

75...8.

431:7..8/./0389.09.4.3/4..490080:7.../0389.4/4$"   $00..89..H345488:74$"044330. .847039.74/434.80:7.4    90.4$" /0.4F82508-..07E0109:.5. 389.389.454%5.947 %5.3./74 '0.7.08.7.4 ..7 389..7345.08 5.5...806:H3..8573.8. $0./090..430.

488074 389.3.3.43/048..2548 4200!70./08.8 O O 7.76:0.4545.:234205.2.8848 ../74F$"    314720:2.   '0716:044.4248./.45740943/48472834'8:.943  .750.4  34205.7./4.4:708:2/.74 $"    .424:2 807.7./48   .89740:2.431:7.7.7:2-.424.4014730...4/0/.803.-0.701.7/ 431:7.088.045 2-47.389.7 .76:.7.4 807./.0:E903..7...:905./4834$" :8.794.8946:0.84508/013/.3/.4254303908389. 9.7.4 7./4834$".2.7:234.3/4$"/23897.4545.7./48.76:0..947.8  4248..  570884:$.76:0..4/0/.2480109:.574.4:8:E747449  6:034-4940.7:2-.880:39089.20390705097485.454$9.

2082.430..9.4 .02.../48 3434884. .45470.1:7.9030$.48 .7..8974 090.  43/0840-/4848086:02.6:034-49470.947 0 3.900$.0  O O 6:084-704086:02.900 %./40800.43420/.70.90%.4248946:00/013.30./.-.4314720.-04:.424-494/70940 800.6:0.E70.2548/.02..3.8 .310747086:07/.45470.430.4$"/233897...4/0 /.-0.-0 80:7/013.031472043420/4-.O O -7.84 .

:2. #059.3897:4$#% % 8946:0'&$ .3897:4$% # 8946:0702484-9074 708:9.6:0..430..7:2.797/4203:%448800.4 ./4$"":077480/90./0734   0.:. 4507.-477.5. O O 80:7./4.9..:905.-.30.3.:7:27089743.454$" ":077480 .42:2...47/01472.7..6:034 -4940.403.-0.4 0109:.

/.0 80:73..42/487089748  -7.454//#010703.//4$"4330.907.0884.89..750.3/43.947 %5.3.7.:2.884.89740.70107H3.0884.70:234.4$..947 %800..../48/4$" !.8808/0.4243420$"* 0.943.6:084-7043420 /45740940800.0454:4'8:...4 574094/49543/4855../40.4/0/.430.70107H3.:.08902420394E902484-.02483.-0... 570880.8946:0.3/434 -494-77.8 ././48.44330.43.5.:7.43/014389.7. 9.

503 .

 9.4397408 O O .-!.4314720..0 %0989.-!.9:99438 5.:.-!.0 %09. 41472:E745.-!.1:7.03./743.439740%./..:..:2.0.4 .-43974 550.4880:3908.7H3.4   .%.57207.703.4-907.-439740/013.-0 4397408%09499 99420099!70.-.4397408.5. /48%.7. .08 O O O %.8974 %.

7 .8803147204 3420!74/:94 .39  09709:73*/< 809*/.:0< < < < .8 80:7/013..2.4/0...43049025.3488.908800..0  '.439740.7.%...248/0133/4 202-7480574570/.76:..880!74/:94 .3/4.4  5:-.880!74/:94 ..30.:0< < 5:-...:7.7.:7 -93-7 0-93!74.2..*570.$973420  09709:73*3420< 809*3420.03.0%   5:-..:.-!.43..4  09709:73*570.88!74/:94   39*/  $973*3420  0..80:3/.86:07E 705708039.3/44.!70.O/43089.7.7./09025.O .480:390.%.3/4343420/45740940 800..2..039/.-!.4 -9390.0.88043/0089.2085./0!74/:94 :83$8902  3.4397408:9943-934.9.90.4.454//0902 .024840.:0< < 5:-./08/.:90/41472:E745.2483.7 -93..:2.!74/:948  ./.7/'0 /.4< 809*570..

./08 4200!70.4248574/:948800.4908:8..880!74/:940/01324848202-748*/  *34200*570.97.-0..88084 :83$8902 :83$8902 40./48 800.4/0..4574/:94 :5/.:2574/:940890390 /0090!74/:94 0.::234.4 .9!74/:948 709473.:2.248.89.8/039071./48  47..4248574/:948 800./.7.908800.039/. $6039 :83%  80:7..90.8 85../.4 O O O O O O 800..76:.880 .248.43.:2.38107H3.9438 0307../.%.90!74/:94 ..0890..-. 5.454//0902 .40.O/4 /  38079!74/:94 3. :83$6 .9./09025.:2 574/:94800.43./0574/:948 89!74/:94...0884.9:.8.7.9!74/:948 709473.4314720 0-/48.248/01373..30.2.8.8803147204 3420 .3/4.0/0 30O./0!74/:945.7.989!74/:948 709473.807E:8.../04-094803970.43049025../450480:.74.9..9./48 800./483089.3/4343420/4 5740940800.:2.76:.8574570/.7. :83$8902 .4.43.880574/:942F94/48..::2574/:940890390 .43.40/0.

23.8847/5..O/4/. 2E6:3.086:08074...-.4$" $64330..489:807 /74495. /7449 5480894::8.430./..088.248/:.880!74/:94/0130..80.880574/:94 0..8J.4$"807.574/:94   *.8.2484.4.489 5480894:.3/44:8:E747449 .3.4304.880 $973*./43.'0.8973/0.074../48$" 5:-.433: .....43897:947/.7.07 4..083.3/44$"389.8974 < 43/090248 807.424 -.943.9.4/0/..8847//.7E.430.

943   0 /7 #0.43  $6.4330$64330.9.2/ .059430   9740 < ././0!74/:94705708039.709473.3/.2/30$6422..9.4574/:9450480:.079 %439 /7/(  574/:94 420/7420( %4$973  574/:94 !70.%.9.0-794/4848574/:948/408946:0 5:-... /7!70.7:2.943 *. 039/.7.4$"   $6422./07/7  !74/:94574/:9430!74/:94  /7 .7./.9!74/:948  97 $97386$% # 8946:0 .079 %40.7.943 *.5.9.4/0/.!74/:94800.:0 / /  .430.4:8:E74 7449 /.9422./013/..47 4804330.#0. .9!74/:94 39/   97 $97386$% # 8946:0#// .5907  /.  /9  709:73/9 < .9.7./486:0.90!74/:94  &8.059430   9740 < <   800. . $00.5.430./.-0800.4(  < 709:73574/:94 < .2/30$6422.-0  /.2.5907/..248482F94/48  $00.O/4 /  5:-.43  .%.0.%.2/ 0.9./  574/:94 43.43 503  $6.443./07 422.4$"  $6422..80.8847/5.14.3.803./.3/.5.3/0.2/ !.3/ 86 .3/4:23.7.9.-0/930.-.5.209078 //9'.9.8847/ 548088.8974 5480880F4-.9.:90#0.9!74/:948 &8.3/./.30$6.4330$64330.3/ 86 .24834 $" 47.

!74/:94830 89!74/:94  :83 $6.3/.422.3/ 0.2/ 0.4$"   $6422./07/7 .430.433   ..:0 3420 574/:94 420   .059430    .3/ 86 .:9043":07   <  .709473.4(  89.4/38079!74/:94 !74/:94574/:94  97  $97386$#%% 8946:0 3420 570.:90#0. .4   .43 503   .05943 774.2/ !.4  '&$ 3420 570./07   0 /7 #0.9 17428946:0  .4330$64330..4574/:943408946:0 5:-.7:2.89..943 *./0 4-0948!74/:94705708039.7 08946:0 0 088.#0.4 43.943 *.989!74/:948  &8.!74/:948 < < < .5.43   .<   800.!74/:948 // 574/:94  < < 709:7389.079 %40.9.4$"  :83 $6422.3/4:2.404/0574/:948  5:-.088..430.7.3/30 $6422.943.5.3/.9.4.209078 //9'. /7!70.. .7.0  < <    38079!74/:94  &8.4 574/:94 !70.433 503  89!74/:9489.2.4   .:0 570././  !74/:94574/:9430 !74/:94  574/:94  39 /7/( 574/:94 420 $973  /7420( 574/:94 !70.3/ $00.059430  97430.43330 $64330.989!74/:948   97 :83 $64330.89!74/:94800.2/30$6422.422.7.3.7.:7:234.209078 //9'./.9.2/ !.

209078 //9'.4$"   $6422.43 480   < < .3/ 86 ./.90!74/:94 !74/:94574/:94  97 $97386&!%8946:0$%34203420 570.748/.209078 //9'.059430      9740  <  13.43 480   :5/..7.:7:2574/:943408946:0 5:-.  < 9740 .90!74/:94  &8.4//0090!74/:94 !74/:94574/:94  97  $97386%# 8946:0#/ /  $64330.0.   .4330$64330.209078 //9'..2/30$6422.2/ !.059430     9740 <  13././48/0:2574/:94 3408946:0 5:-.  .5.943..43   . .2/ 0.43 480   < <  /0090!74/:94  &8.7.2/ !.943 *. .3/.9.4/:5/.     <  < 13.7.:9043":07   <  .209078 //9'.4#// .7.4570.430.:0 / 574/:94    ..2/30 $6422.3/ 86 .4330 $64330.4 574/:94 !70..:0 / 574/:94    .9:.7.9.2/ 0.3/.:0 570.7.4   .5.2/ !.943 *..4$"   $6422.:9043":07   <  .43 503   .2/ !.43   .43 503   .430.:0 3420 574/:94 420   .

/./..3488./.5./4  89./.0884.402..2./0.890248:2.2...7085438.-/.3488.76:.8/013/.04.880 574/:94 2:2.2../030O.../4808:.. 43/090248:2.83/...F.3/4./...705078897/.907:8.03897:08$" !4/07..1:7.248:8../.39..2085././039071.8825085488J../00 .8 43/0 ..2.-...:2.0& .3/4  % ..2085.00./.088.84:4   89.882 O O O .07./48 3..0/:70846:0 807.4:2./4834$" 8O884 '0.0884.00.2085..0& 3..2.0:8.84/..2.02.2.O/442.E88..76:909:7.2.880 574/:94 ././0.48 3./0./489470/574.

./48./0.43/484728 .3/4:8./4846:034F:2.&5.078. O O O O 574/:94 .0 ..8/0 30O.5./48 0709473.8707.7.4397408/0.7..880!74/:94 3..0.....07E.7..07:2./0 39071.3.... 57E9.0884..05.:.2085././48 341472:E74089./..439F2482F94/48/..2.&.439F2.4/0/../.6:05478:.2.2085. ":.0884.2085../.3.../..0884/7094/..484-0948 :3.0...2..80:3900897:9:7.0  574/:94 .-4..0%  & 705708039.2481.4 3.24848..2.6:0..4:-.0  574/:94 439F2482F94/485./4834 $" 3.3488.088448/../709.  48845740945488:.03/44..

:2.03F7.24897.::234.::2574/:94 89!74/:9489.47./48/0:2 574/:94.7.!74/:94!47 39/  709473.4574/:94 4314720F24897.48/..!74/:948  709473.89. 0.:!74/:94 !74/:94574/:94  0.!74/:948  709473.907./0134/.2.248..80:7 ../43..9..43/090248.248.%.880574/:945488:4880:3908 2F94/48 O O O O O O ./.880574/:943.!74/:94 !74/:94574/:94  .94/4848574/:948 34..907./..-0800.43..  '.880574/:94 .4574/:94 . ../0 574/:948 !74/:9489.:23.4!74/:94 !74/:94574/:94  3.2.1:7..3/0E2502039.

..3/4:2.880!74/:94089.248482F94/48 .4 1.74880:39083.!74/:948  ....7248709473.7../08/... !70./0!74/:94 70107H3.43897:947/. :83$8902 :83 :83%  :83$8902 .89...088.08348254798 :83$8902 40..880574/:940/./0574/:94834 2F94/489.039/.. ...'0.94/0089.8 574570/.248/.2085./.7.5.9438 0307...088.4 5:-.2.7.574/:94  < 47.03F7.0.7482F94/48/.0 80../.O/4/..9.2484..2..70107H3./0...% 5.7.0307.880574/:94 0...70107H3..0248/0.8.

9!74/:948  < .3/44 2F94/4800./.!74/:948   97 /.4 574/:943408946:0:8.3/442F94/4800.%.4!74/:94 !74/:94574/:94  97 /.4574/:9450480:.:2/. 039/./0!74/:94705708039.9.709473.30574/:94   709:73/.O/4 / .989!74/:948 /.30 574/:94   ..7./. 5:-.-0  97 /../.3/4:23. .!74/:94!47  &8.9!74/:948 /.404/0574/:948:8. 800.97.3/4:2.709473..7..!74/:948  709473.30574/:94  709:73/./. .5. 800.7./.. 800.3./04-0948 !74/:94705708039.4/34. .43.2./..9.9.2.9.9!74/:94 /.!74/:9489.9!74/:94 /  <.30 574/:94  9-/.89!74/:94 89./.-09-30.43..%.9.:7:234....9.!74/:948  &8. 800.9.F8/42F94/4800..7:2.4!74/:94 !74/:94574/:94  &8.2.5. 5:-.9.2.3/442F94/438079!74/:94 /.!74/:948  ..!74/:94!47 39/   97 /. 5:-..989!74/:948  <.7:2.059430   9740 < 709:739- <   89..059430  9740  < <  34.5.-0.-0800.4294/4848 574/:948:8.%..059430  9740  < <  89.  5:-.89.

43088.F8/42F94/4:5/././0574/:4 ./.430O.43948 09....2480109:. .7.O/4/.43.30 574/:94   /.9:.  088.3488./..880574/:94  .1472./4.E. 38079!74/:94 574/:94  <..2502039.30574/:94  /.5.059430  9740 < <  :5/./0134/4.9. /0090!74/:94 574/:94  <. 5:-.825.08701070390.0.4/./.059430  9740 < < 4089.4.059430  9740 < <  /0090!74/:94  &8...6:907J....:J248.4/030O. :5/.3/4303:2.248./0/4002542.90!74/:94 574/:94  <../48/0:2574/:94 3408946:0.4/482F94/48/..9.4/0.8.748/..F8/. .. 5:-./..90!74/:94 /.....2.4247089708/0 . 2F94/4/0090!74/:94 /./. .!74/:94 !74/:94574/:94   97 /.:7:2574/:943408946:0.802:288902.7.48  .:4/02548948 /08.97.97.8..4708 ..2.907.8808 /0./.:!74/:94 !74/:94574/:94   97 /./.5.9..90!74/:94  &8./0 30O. ..2./.

/..425430390%..4314720 ...0& 3.../030O../.2./.....:2574/:94/434884/42J34 3488./.248:8../039071...2.00.2085.../.880 574/:94 .0884.880!74/:946:0705708039.2.882 O O O O .2.880 574/:94 .48 3.2.2085.80:7 .4/48574/:948./.42/09...00.897.5./48 3.8/013/./039071.3/4:2./..08/4 574/:9404:97./0..84.8.84/.43/4847286:0 5488::21472:E7443/0.70.02./48. 89.76:909:7.F8/0:2 .0& .97..0807E:2...81:7.2085.-4397454/02484-907:2.

./48  .-!.-0 %094 99 99420099!70.03.7 -93./..4 3.8:.!74/:948    4288490248.39071..%.6:034-494.0248884 .08.-..574570/..4880:3908.:.80:3/.70507889731472.088.%444 ..7.057439.797/.4 -93907.-!089.703.574570/.4 :9943 -934.%. 5.-!.7. %./.:7 -93- ..0.7.8:.0..-43974.39071.:./0 550.4397408.3488.574570/./48  6:0F7085438E.2./.0 ./4 /040.425430390..2.7/'0  /.797 /.5. %.4./:.0884 ./. .424:./48/.9430/013..57207.9...5.-.42489.2..4./0.0 ./.-439740/013..2.8%.03/4:2..9:99438 .3.89743. !.4  6:05478:...80$"01.439740%.439740%. .054770.80/0/. 3.:507./.7089.0./0%.:../.3488.-!.3/448/./030O.08/0133/4../03420 /.4.:.-!.89740/.%44403.807:8.4.424803/4:.-!.

.4/434884 1472:E74/0.'.9803/07 ./4-494-76:07E0-748 /.%7. 4-0.O/4/40.7.02:2. :83$8902 7.43.7480././... .0 %4$973  < < 0890.9438 0307.4/93-7. ..%  ..2.7./483.4.03948/48.!74/:948 .-000-748574/:94834.4/934.880:390870107H3..3893.2..248.7/'0  .7 :2.9803/07 . 3488.059430  088.0394...9.089.9.38107 -0.039780  .$4:7.4 .-!.24842F94/4800.:8.880/030O..0394..884343J.039780   97  574/:94-30574/:94  /.2.70107H3.%. 4-0.4.%.9.4240..07 .880!74/:94  '.1.!74/:948 6:07E709473.9.47.!74/:948  <./4-4944..3 :83$8902 3/48 4728 :83 :83%  4906:0902486:0907:2.420.248.880!74/:94 002 80:/.0 - 800.7.O/4.9 43/0/013248.7/'0  '0.248:8./.04 $4 774  0 088./.9.8 :83$8902 :83$8902 40.3488.248:2..9.4397408/01472:E74:99435../030O.48.0248907..43.7.4 !..

4...4!74/:94 5  < ./48 504:8:E74.8946:0/0132480890../.F8/./4-494907.8.4!74/:94 5  5.7.40.4574/:943./48  -807.../...O/4.2085.06:0 5.:8.9803/07 .248:2.720974:24-094574/:94034.O/4/4574/:94  548420824F . .24831472.248:2.3..039780   !74/:94530!74/:94  .43974.7.7 ./4. 99!70.059430   088.848.24842F94/434. !74/:94530!74/:94  5 420 $973 99420 %09 5 !70..7.2.97.424/4 954/0399  80:7..4708 08.880!74/:940/013248./084200!70.079 %40.88.8/0909499420099!70.0.97-:3/4.80/0/.8..443.248.-...9...:7:234..884.04 $4 774 0 088..470814730./4504$.3893.3893.880!74/:94  343.4245.74.254.4 4 570.0 %4$973 < <   !72074.708  80:7902484.7.000280:/.4/93907.0394. 4-0.4 %09  97  574/:94-30574/:94  - 34.8 574570/.

.!74/:94 5  < .720974:24-094574/:94034./4  80:7..24831472.:8.708  '0.0..9803/07 .97-:3/4.079 %40...47..7 4574/:94.04 $4 774 0 088.2.8.74/4574/:945.3893.8 574570/.0394.80/0/.059430   088.9.7..039780   !74/:94530!74/:94  5 43.F8/.2085./4-494./.97..24842F94/4.4./48  -807. 99!70.907.079 %439 99 %09  5 420 $973 99420 %09 5 !70.O/4/40.907. .248:2. 4-0.4/93.7..-./08 4200!70.88.8.8/0909499 994200 99!70.248.880!74/:940/013248...470808.4.4 6:570..7.06:05.248:2.907.907.4245.3893.000280:/.443.807.880!74/:94  343.../48504:8:E74.5 43./.248 .079 %439 99 %09  97  574/:94-30574/:94  .0 %4$973 < <   !72074..:7  ..4708 14730./0391.7.:7.4 %09   97  574/:94-30574/:94  - ..7:2574/:943.848.!74/:94 5  5.

 .9803/07 .:7:2574/:943..:8.2085.97-:3/4..20390902484.. 574570/.4/93!74.24842F94/40.4714730.039780   39/43..3893.9.97.7.F8 /..O/4/4-494!74.9.4 %4$973  < ./0.7....248:2.:7././48/0391.0.8/0909499  80:7.4..8..079 %439 99 %09  !74/:94530!74/:94  97  574/:94-30574/:94  5- 89.7.7 ./.04 $4 774  0 088.880!74/:940/013248. 4-0.0 %4$973  < < !72074.248:2.7.059430   088./4504 5./4  3.059430   088.000280:/.-.0.:!74/:94 5  < .80/0/..880!74/:94  343.72097431472..:7.04 $4 774  0 088. .:!74/:94 5  5.!74/:94!47 /  99420 %095 420 99!70.- 0..0 %4$973  < < .4 %095 !70../4504:8:E74.3893.

5...424:2007. 47039.094/039071.3/4 :2.O/4/4574/:94  .7..2483.0948-E8..3/44/4-9/454712 0-24848/./48/4574/:94341472:E74  4288403..8 5.034 :8.4.4$":8.76:909:7..4..5../.02..F2 548:8./0 909499 %09 80:7./..880.H . 0890.2484.390H3.2.43.030890574094 048845.4-09482.797/.7..077.3H2.46:0.../.24842F94/489.248:2.088.854/02487.4...3893.43. ..802303:2..J.!74/:94!47:8.880!74/:94  03.O/44-902484.248.48/.% :2..24848.2.4                     ..3488..

7.3/4.045 4:'8:.00389.7.4304:8.7..8 .0:8.3/44./4330.9470$"":0774807 .07  .88890390/0389.3/4.431:7.0 :8.$"  434..248:8.085.0/47  % 5.750.4  $"/23897.8504.74880:390870.947. :.88890390  $.7574.57088/943 !./748:07/.0109:.00389.:7848  $"  42:39$07.4::8..

7.43070. 31472043420/4-..4/0/.8./480.4/0/.-.4$"/23897.248 ..79.9..897434$"  -7.3.4:3.6:002.4314720./..4/0/.48 80:7.E70.-0./0389.9470.-0 80:731472043420/.900$.424-494/7094/424:803.7.4/0/./480.80:7.0784   7./4./480800.6:034-49470.3.4-.3.039080/013.2.2-F2./.8/  3420 03/0704002.43/084 0-/4848-.074/434.. 5O81.7:234.6:0.3/44-.9./48..8.02.9.09  !4/0248:8.4 .81077.-0.2039.90 %.83/..3.

0-4 .:38/.3.!.424./483..3. 6:0480:.4 02./01472. .3.4$"":07748070 /90.43147201:7.702039...:90 $#%% 03908 3420 03/070.7.:08 . /.9.:7..40..-.6:002 0.97-:J/4504$" .47F..-0.03.3897:4$#%% .0  !.42 -7  .0572E7.254/14/013/4.:   ..-7.

750.2.4304.248./.4800.7.420..$4:4  .4$.$"0254:8.750.7./4834$" 89.7:2.24857439485.045  -7.045034203:76:.4002 80:/.47.7  './48.3./.413.42 ..-0.34.89740.4/0/..03908.9..3/4 4$.90702484-.:38/.84:4.

4/0482./0077.8 ...30.430 5.:7:2 .30.2483.7/.8.4!74094800.439740.76:05.:. 84:4 3420:. ./74.84$"0254  41472:E745..3.797/...9..9..43/48031472043420/.5.4.083/4803..3472 .2039.30.

/0..9./48.9.88.4/0 /.0390800-74880:8 /.248572074 /0.4304.9.3472$8902 3/48 4728 472  .:74.7.2483./..30.O/45.-0....08   :83$8902 .424-. :83$6 .7./4834...7483.7/  5:-.  . 1.897434$" .. $6039  80:7.07.088.O/4.3..7 .9.2085.

5907 57.$092.90$8902 3/48 4728 .59072/.9.90.9.3472   39..7/2.9.042543039   ../..90$6..$09 5:-.90$64330.9432433 57.7/ 57.9..9.57.

.

9.$0930.809 2./01304/.9.$09   .9.

.

4 243330$64330...074.:79 314.8974:/74495/   97 .430.9.80..943 !07889$0.430.40.-.7.80./..9.80807./.074.-.489/.489/./01308973/0.8974:/7449 807.

.

059430   088..-70. $8902 .430.9..04 $4 0 088..0 %4$973  <  .4 2433 503  < .

.

90 503   .80....943$9.071.4304089.-079.904330. 1 2433 $9...

.

5907:8.088./.9..5907 $%  # 03908 2433  ./.7.3897:4$"5.03908 2/.590730$6.7. ..7.9.:2.3/4.-0.

.

809..5907  2./.$09 03908  .04/.9..5907 2/.57003.9.

.

$09 2.4:1.574570/.9.../088.O/4./4.8973/0.1472.708:9.484-70.7:254:.2.7/ .02.$4:7.947.97-:.5.9..7.9./.0/47$" 4330.0/4 ./0.4574.02-0703908 < < 4.9. 0F/013/.9.4304 :8.$4:7.7/ 2.9.9.7/ .0:.

074.80.:79314..8974  ../.9.943 !07889$0.489  .80 $07.09 %  243330$64330.

6:0807E:8./4$".4304  507293/4.07 .0302.&/7449  !/  &24-094$64330.0 3/./450.43897:947 !74570/.480:7..438:9.9:.088434..7.1472.431E.1472../.803.34F./48:8042F94/4.7. 54/08074-9/.4/0/..8547   574570/.4/0/./48 :8.800./..907.8.:793145.3/4:2.7...08 /4:8:E746:.:3/4.882:2.4304 0850.3.854/02807/013/.14390 /0/..8.0.$64330.4246:.4.701097434../0.907.4304807./48   574570/.7.424..943%204:9 .9:.. 02598973  02598973 02598973 02598973          .$4:7..47709473.5O8.3.088....8973/0.4304147507889/.74 $"   .:2.9.0 $07.80 .50.83893./4./4854/05078897:2..439. /3.3.30.4304  95.3/4.434204:03/0704/0 70/0/./0$07.31472.4/0/..8805...7.74-.807 :8.4304  3.4 -. 4880:8.:2..8574570/.424.97-:94!07889$0.80/013043420/4-.47147/013/4.85.424.4/0/.803. 3893.   574570/..8 80:79024848./48.3893. .807E109.430414 ./74F 2.4/4:8:E74  .4304347E0-7.-079.1..9...07'07843 './0&/705708039.424%7:0..3/4.74 -.808845.:9039..5..9.831472..2..:2.   $04.9..47083./0.94394/./0884/013/.80.4/./.47085.473. ..H.943$973  4330./7434 .7.805.943705708039.7. 80.248:2.:79314147/013/4.../48$" ":.7../08 4330..-.8/0.39/4.$4:7. 4.45.9.-079.8973/0.80   $0!07889$0.3897:4$"54/07E4.14390/0/.47707:20774 !.3.70/03.20390 /089..31472. .

43044 4-094$64330.7.4  57490.:2.803.4314720 .0 807E089.-.-.4.:9.7.42:2.077/0.430484-708.9.803/4:8..42.943$9. 5..7 .904330.74.7497./4 0 547884.42./0!/705708039.9439039.010.7/   ...439740 .20390.H/0..44334$"   5O803.9.7.4304 /8543J.....4304./.2.797/4544/0.5.430405.4/85480 -44/85483   1 /85483   1 2433 $9././.80 85480 /85483  <   4:8.4304 80340897:2.4./434..90/4.4-907:2.70.94334F10.077.6:0089.439. /4$"   2433 503   400.024842F94/485480.3/4$64330...3893.90 503   2433 480  < < -.34.943 85480   !.10.3/4 5034$64330.943 4804: $64330.74574094702484-907480:390708:9. .4304.574570/.-00..

./48   &2-42089:/45.H    !0:04574094..42$"0 :.79482. 89014.4..7/002-70.0884.0.8:2.3../48 .425094./.8.503.4.506:03.6: $"0254 5   .7.3974/:4.