You are on page 1of 310

Curso Banco de dados com C# e o Visual Studio .

NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 1

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS





Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 2

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Nota sobre direitos autorais:

Este e-book de autoria de Herbert Moroni Cavallari da Costa Gois, sendo
comercializado diretamente atravs do site www.juliobattisti.com.br e
www.linhadecodigo.com.br ou atravs do site de leiles Mercado Livre:
www.mercadolivre.com.br, mediante contato atravs do e-mail:
batisti@hotmail.com ou webmaster@juliobattisti.com.br, diretamente pelo autor ou
por Jlio Battisti. No Mercado Livre, somente o usurio GROZA que tem
autorizao para comercializar este e-book. Nenhum outro usurio/e-mail e/ou
empresa est autorizada a comercializar este ebook.

Ao adquirir este ebook voc tem o direito de l-lo na tela do seu computador e de
imprimir quantas cpias desejar. vetada a distribuio deste arquivo, mediante
cpia ou qualquer outro meio de reproduo, para outras pessoas. Se voc recebeu
este ebook atravs do e-mail ou via ftp de algum site da Internet, ou atravs de
um CD de Revista, saiba que voc est com uma cpia pirata, ilegal, no
autorizada, a qual constitui crime de Violao de Direito Autoral, de acordo com a
Lei 5988. Se for este o caso entre em contato com o autor, atravs do e-mail
webmaster@juliobattisti.com.br, para regularizar esta cpia. Ao regularizar a sua
cpia voc ir remunerar, mediante uma pequena quantia, o trabalho do autor e
incentivar que novos trabalhos sejam disponibilizados. Se voc tiver sugestes
sobre novos cursos que gostaria de ver disponibilizados, entre em contato pelo e-
mail: webmaster@juliobattisti.com.br.

Visite periodicamente o site www.juliobattisti.com.br para ficar por dentro das
novidades:
Cursos de informtica.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 3

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Guias de Estudo para os Exames de Certificao da Microsoft.
Artigos e dicas sobre Certificaes da Microsoft.
Artigos sobre Carreira e Trabalho.
Dicas de livros e sites sobre diversos assuntos.
Simulados gratuitos, em portugus, para os exames da Microsoft.


ESTE E-BOOK NO PODE SER FORNECIDO EM UM CD
OU DVD DE NENHUMA REVISTA
SE VOC OBTEVE UMA CPIA DESTE E-BOOK
ATRAVS DO E-MULE, KAZAA, MORPHEUS OU
OUTRO PROGRAMA DE COMPARTILHAMENTO,
SAIBA QUE VOC EST COM UMA CPIA ILEGAL,
NO AUTORIZADA
USAR UMA CPIA NO AUTORIZADA CRIME DE
VIOLAO DE DIREITOS AUTORAIS, COM PENA
PREVISTA DE CADEIA
VOC S PODE USAR ESTE E-BOOK SE VOC
COMPROU ELE DIRETAMENTE COM O AUTOR: JLIO
BATTISTI




Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 4

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS







Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 5

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

PR-REQUISITOS PARA O CURSO:

Para que voc possa acompanhar as lies deste curso necessrio que voc j
tenha preenchido os seguintes pr-requisitos:

Conhecimento bsico do Windows 98, 2000 ou XP, tais como:

Criao de pastas e subpastas.
Utilizao do mouse e do teclado.
Operaes bsicas com arquivos e pastas, usando o Windows
Explorer.
Conhecer conceitos tais como cones, rea de trabalho, janelas do
Windows, uso de menus e outras configuraes bsicas do Windows.

Conhecimento bsico da linguagem de Programao C# e da Plataforma
.NET alm do uso bsico da ferramenta Visual Studio .NET 2005.

Voc pode atingir estes requisitos fazendo o Curso Programando
com C# que comercializado no site www.juliobattisti.com.br de
autoria de Herbert Moroni tambm.




Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 6

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Palavras do autor:

A proposta desde curso ajud-lo a usar banco de dados em seus programas
atravs da linguagem C# e a ferramenta Visual Studio .NET 2005. Para tanto, no
hesite em fazer os exemplos propostos. Aprender a programar como dirigir, voc
aprende fazendo, para isso apresentamos uma srie de exemplos passo-a-passo e
conforme vamos aprofundando nos exemplos e as duvidas vo surgindo discutimos
a teoria, assim fica mais fcil assimilar e memorizar o assunto proposto.

Tambm estou disposio para responder eventuais dvidas sobre o contedo do
curso, envie-me tambm suas sugestes para que possamos sempre melhorar o
material proposto. Meu e-mail para contato moroni@moroni.com.br.















Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 7

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

ndice do Curso
ndice do Curso............................................................................................ 7
Introduo .................................................................................................. 8
Capitulo 1 ................................................................................................. 11
Introduo ao ADO.NET............................................................................... 11
Capitulo 2 ................................................................................................. 71
Conexo com o banco de dados.................................................................... 71
String de Conexo...................................................................................... 73
Recuperando a string de conexo de um arquivo de configurao.....................106
Connection Pooling ....................................................................................109
Capitulo 3 ................................................................................................111
ADO.NET e o modelo desconectado..............................................................111
O objeto Dataset .......................................................................................111
O objeto DataAdapter ................................................................................137
Criando um objeto DataSet utilizando o Visual Studio 2005 .............................148
O objeto TableAdapter ...............................................................................166
Utilizando os mtodos do objeto TableAdapter ...............................................229
Capitulo 4 ................................................................................................255
O objeto Command e o modelo conectado ....................................................255
Capitulo 5 ................................................................................................292
Tratamento de erros em consultas a bancos de dados ....................................292
Capitulo 6 ................................................................................................298
Transaes...............................................................................................298
Capitulo 7 ................................................................................................302
Finalizando a aplicao de exemplo..............................................................302


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 8

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Introduo

Neste curso voc vai aprender a programar utilizando banco de dados com a
linguagem de programao C# e a plataforma .NET da Microsoft. DE FORMA
PRATICA COM UM EXEMPLO COMPLETO DE UMA APLICAO DO COMEO AO FIM
COM BANCO DE DADOS SQL SERVER 2005.

Vai aprender utilizar os poderosos recursos do Visual Studio para desenvolver
aplicaes de forma rpida e produtiva.

Vai conhecer o modelo desconectado e como usa-lo em suas aplicaes.

Vai aprender a trabalhar com transaes.

O C# junto com o Visual Studio .NET 2005 compe uma ferramenta extremamente
robusta e fcil de utilizar, com perfeito suporte a todas as novas ondas que rondam
o mundo da informtica e tecnologia.

O Visual Studio .NET 2005 a melhor ferramenta de desenvolvimento de aplicaes
para a plataforma .NET. Com uma interface amigvel e integrada com os ambientes
e de fcil entendimento, proporciona aos desenvolvedores a criao de aplicaes
sofisticadas com todos os recursos existentes, sem ter que ficar criando parte de
cdigo em um aplicativo e o restante no outro. possvel com o Visual Studio
gerenciar recursos da mquina e local e de um possvel servidor, criar aplicaes
para Windows, web e dispositivos mveis.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 9

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Captulo 1: Neste capitulo voc vai conhecer o ADO.NET e j vai criar um
formulrio completo com insero, atualizao e excluso de registros. Vai
aprender a criar um banco de dados utilizando o Visual Studio de forma simplificada
atravs de diagramas.

Captulo 2: Neste capitulo voc vai aprender profundamente sobre conexo com
banco de dados atravs do objeto Connection. Vai aprender o que e quais os
benefcios do Connection Pooling e vai utilizar o objeto Command para recuperar
dados de um banco de dados.

Capitulo 3: Neste capitulo voc vai conhecer o modelo desconectado, o objeto
DataSet e o DataAdapter. Voc vai aprender tambm a utilizar o Visual Studio para
criar DataSets tipados criando assim uma camada de negocio separando sua
aplicao em camadas. Aqui estudaremos profundamente tambm o objeto
TableAdapter.

Captulo 4: Neste capitulo vamos estudar o modelo conectado atravs dos objetos
Command e DataReader. Fazeremos um exemplo que vai lhe ensinar a inserir,
atualizar, excluir e exibir dados de forma conectada. Voc vai aprender tambm a
utilizar parmetros em seus comandos SQL.

Captulo 5: Neste capitulo voc aprendera a tratar erros que podem acontecer
quando voc manipula dados de um banco de dados.

Captulo 6: Aqui estudaremos transaes, o que so, quais suas propriedades e
como usa-las para garantir consistncia em nossos bancos de dados.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 10

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Captulo 7: Aqui finalizaremos o exemplo criado durante o curso fazendo as
consideraes e revises finais.

Para enviar suas dvidas referentes aos assuntos e exemplos abordados neste
curso, para enviar sugestes de alteraes/correes, para sugerir novos cursos,
para criticar e para elogiar (porque no?), s entrar em contato pelo e-mail:
moroni@moroni.com.br. Visite o blog do autor em www.moroni.com.br.























Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 11

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Capitulo 1
Introduo ao ADO.NET

Dificilmente desenvolvemos uma aplicao que no utilize um banco de dados. Isso
porque sempre precisamos armazenar as informaes que esto sendo
manipuladas em nossos programas.

Com o surgimento e crescimento da Internet e da globalizao, o acesso a bancos
de dados tornou-se mais complexo porque as aplicaes passaram a ser
distribudas em vrios locais e muitas vezes as informaes manipuladas so
acessadas em mais do que um banco de dados e os mesmos podem estar
fisicamente em locais diferentes ou at mesmo em continentes diferentes.

Podemos precisar em nossos sistemas de informaes que esto em bancos de
dados distintos, como SQL Server e Oracle ao mesmo tempo. Alm disso, algumas
vezes o nico acesso aos dados pode ser atravs de arquivos XML que fazem a
ligao entre dados de sistemas diferentes. Isso muito comum em coorporaes
que tem mais do que um sistema rodando e muitas vezes os mesmos rodam em
plataformas diferentes.

Temos hoje vrios dispositivos que precisam acessar os dados, o prprio Bill Gates
tem falado a respeito da Informao da Palma da Mo, e isso cada vez mais
comum atravs de celulares, Pocket PCs e outros. Temos at vdeo-games que
acessam a internet e consequentemente podem e fazem acesso a dados e a
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 12

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

tendncia que a cada dia mais dispositivos sejam conectados e troquem
informaes.

Sem me aprofundar muito na teoria eu gostaria de deixar claro as necessidades do
mercado atual e consequentemente o que precisamos lidar no nosso dia-a-dia.

Sempre saliento a complexidade dos sistemas que precisamos desenvolver
atualmente e com prazos curtssimos e recursos financeiros limitados. Isso um
reflexo da globalizao e da competio acirrada pelo mercado que temos
atualmente.

Sempre saliento tambm a necessidade que temos ns desenvolvedores de
ferramentas e recursos que melhorem nossa produtividade e facilitem nossa vida.

Neste aspecto tenho me identificado e defendido a plataforma .NET pela sua alta
produtividade e facilidade tanto de aprendizado como no prprio desenvolvimento.
Essa produtividade se da principalmente atravs do uso da ferramenta de
desenvolvimento Visual Studio .NET 2005 que utilizaremos durante o curso.

Como sabemos o foco principal da plataforma .NET da Microsoft facilitar o
desenvolvimento de aplicaes distribudas. Para isso a Microsoft procurou
identificar e seguir padres que permitem que nossos programas desenvolvidos
utilizando o plataforma .NET possam se comunicar facilmente com outros
programas e bancos de dados atendendo as exigncias do mercado atual.

O padro mais conhecido e adotado no mercado hoje o XML. Por isso a
plataforma .NET tem amplo suporte a sua utilizao (XML), com classes e recursos
que permitem sua manipulao de forma simplificada.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 13

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


O Microsoft ADO.NET disponibiliza as classes necessrias para acesso e
manipulao de dados em bancos de dados e arquivos XML. O Microsoft ADO.NET
uma parte do Microsoft .NET Framework.

Uma das grandes vantagens do ADO.NET a possibilidade de trabalhar de forma
desconectada do banco de dados, como veremos durante o curso.

As classes do ADO.NET esto agrupadas no namespace System.Data. Sempre que
voc for utilizar o ADO.NET voc precisar importar este namespace.

Adicionalmente voc precisar importar para a sua aplicao os namespaces
System.Data.SqlClient e/ou System.Data.OleDb e/ou
System.Data.OracleClient dependendo do banco de dados que voc for utilizar.

Dentro de cada namespace destes voc tem as classes para acesso e manipulao
de dados utilizando o banco de dados em questo. Estas classes seguem um
padro, conhecido como modelo de dados unificado que facilita a utilizao e o
aprendizado como voc ver durante o curso. Isso quer dizer que um objeto criado
por uma classe para acesso a dados utilizando o namespace
System.Data.SqlClient criado e manipulado da mesma forma que um objeto
utilizando o namespace System.Data.OleDb.

O namespace System.Data.SqlClient usado para acessar bancos de dados
Microsoft SQL Server a partir da verso 7.0.

O namespace System.Data.OleDb utilizados para acessar arquivos de banco de
dados do Microsoft Access e Microsoft SQL Server verso anterior a 7.0. Nada
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 14

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

impede voc de utilizar este namespace para Microsoft SQL Server verses 7.0 e
posterior, no entanto a performance menor o do namespace
System.Data.SqlClient.

O namespace System.Data.OracleClient usado para bancos de dados Oracle.

Voc pode acessar outros bancos de dados utilizando outros namespaces, mas
estes devem ser instalados separadamente. Visite o site do fabricante do banco de
dados que deseja utilizar que geralmente eles tem a disposio os arquivos para
instalao. At mesmo para o Oracle - embora a Microsoft disponibilize classes para
acesso ao mesmo nativamente no framework - se voc acessar o site da Oracle
ter a sua disposio a instalao de classes feitas pela prpria Oracle que tem
performance superior as da Microsoft.

Tambm exploraremos os recursos de produtividade do Visual Studio .NET 2005
para criao de aplicaes com acesso a banco de dados.

Como voc vai ver durante todo esse livro eu gosto de trabalhar com vrios
exemplos passo-a-passo. Isso facilita a compreenso e memorizao alm de j
mostrar como voc pode aplicar os conhecimentos adquiridos na prtica. Fique a
vontade para me acompanhar nas prticas em seu prprio computador ou apenas
estudar os passos no decorrer dos exemplos.

Para acompanhar os exemplos voc vai precisar ter uma verso do Visual Studio
instalada em sua maquina, desde que ela seja na verso 2005 voc pode us-la
tranquilamente, estarei usando nos exemplos o Visual C# 2005 Express Edition
para as aplicaes Windows e o Visual Web Developers Express Edition 2005,
para as aplicaes web por serem uma verso gratuita que todos podem baixar
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 15

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

facilmente do site da Microsoft. Se tiver duvidas sobre onde baixar e como instalar
essas ferramentas consulte o APENDICE A no final deste livro. Estarei usando
tambm a verso Express do SQL Server 2005 e o Microsoft Access 2007
como Banco de Dados.

As ferramentas Express da Microsoft so voltadas para estudantes, entusiastas, etc.
que querem aprender/conhecer a plataforma.Net. So ferramentas com algumas
limitaes pensando em desenvolvimento corporativo (fabricas de software), porm
com recursos incrveis e produtivos. possvel desenvolver projetos de todos os
portes com as ferramentas Express. Se voc trabalha sozinho elas so uma
excelente opo. Saiba mais sobre elas visitando a url:
http://msdn.microsoft.com/vstudio/express/

Durante este curso vamos criar do comeo ao fim uma aplicao para
gerenciamento de projetos. Esta aplicao ser abordada em todos os captulos e
conforme formos aprofundando nela vamos entendendo cada vez mais o que o
ADO.NET 2.0 e como utiliza-lo em nossas aplicaes. No vou me aprofundar na
regra de negcio desta aplicao, como eu disse, ela apenas um exemplo, a cada
capitulo voc vai compreender um pouco mais sobre ela e no final, com ela pronta
voc inclusive poder us-la para gerenciar seus prximos projetos de software.

Agora que j falamos sobre o nosso ambiente de produo vamos fazer nosso
primeiro exemplo para compreender o que o ADO.NET 2.0 e como utiliza-lo
em nossas aplicaes.

Neste exemplo vamos comear a criar nossa aplicao de gerenciamento de
projetos. Nele voc vai aprender a criar e gerenciar um banco de dados utilizando o
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 16

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Visual Studio .NET 2005 e vai conhecer alguns recursos que a ferramenta
disponibiliza para auxilia-lo em suas aplicaes.

1 Entre no Visual Studio C# Express Edition. (Lembre-se que durante os
exemplos estarei usando as verses Express, no entando voc pode usar qualquer
verso do Visual Studio .NET 2005 com pouquissimas diferenas.)

2 Crie um novo projeto do tipo Windows Application chamado
ControleProjetos como mostra a imagem:



3 Vamos adicionar um banco de dados ao nosso projeto. Para isso na janela
Solution Explorer, clique sobre o nome do projeto com o boto direito do mouse e
selecione a opo Add e clique sobre New Item como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 17

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



4 Na janela Add New Item selecione SQL Database. Vamos dar o nome de
Projetos para o nosso banco de dados, para isso digite Projetos.mdf em Name e
clique em Add como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 18

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



5 Assim que adicionamos um banco de dados ao nosso projeto executado
automaticamente o Data Souce Configuration Wizard. No vamos nos
aprofundar nele neste momento e nem mesmo o utilizar agora, simplesmente
clique em Cancel como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 19

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A imagem abaixo mostra como ficou seu Solution Explorer agora que o banco de
dados foi adicionado ao projeto.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 20

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



6 Localize a janela Database Explorer (Server Explorer se voc NO estiver
utilizando uma verso Express do Visual Studio), voc pode encontrar a janela
acessando o menu View \ Other Windows \ Database Explorer.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 21

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Na janela Database Explorer voc pode criar e manipular o contedo do banco de
dados.

Vamos agora criar as tabelas do nosso banco de dados utilizando o recurso de
Diagramas que nos permite ter uma viso do todo ao modelarmos nosso banco de
dados.

7 Na janela Database Explorer, clique com o boto direito sobre Database
Diagrams e clique sobre Add New Diagram como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 22

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



8 A seguinte caixa de dialogo exibida apenas alertando que no existe nenhum
diagrama no banco de dados e perguntando se voc deseja criar um. Clique em
Sim.



9 exibida a janela Add Table. Esta janela permite que adicionemos no
diagrama tabelas que j estejam criadas no banco de dados, como ainda no temos
nenhuma tabela no h o que adicionar, apenas clique em Close.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 23

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



10 Vamos agora criar uma tabela, para isso clique com o boto direito sobre o
diagrama e selecione New Table.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 24

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



11 Voc questionado sobre qual o nome para a nova tabela. Digite Empresas e
clique em OK como mostra a imagem:



12 Crie os campos conforme a imagem abaixo, note que temos trs colunas,
Column Name (nome da coluna), Data Type (tipo de dado que a coluna vai
armazenar) e Allow Null (se marcada permite valores nulos ou seja, o campo no
obrigatrio).

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 25

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



13 Precisamos definir agora um campo como chave primaria (Primary Key) para a
nossa tabela. Este campo precisa ser obrigatrio e no pode ter valores repetidos.
Ele serve como identificador nico para a tabela, como um cpf para ns, voc pode
encontrar varias pessoas com um nome igual, mas no com o mesmo cpf. No caso
da nossa tabela vamos setar a coluna EmpresaID como chave primaria, mas
poderia ser feito para a coluna CNPJ tambm, preferi criar um campo novo porque
o CNPJ grande e no nosso caso um texto o que poderia dificultar um pouco as
pesquisas que so facilitadas com nmeros simples, do tipo inteiro, mas cada caso
um caso. Para definir EmpresaID como chave primaria, clique com o boto
direito sobre a mesma e selecione Set Primary Key como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 26

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



14 Vamos examinar as propriedades da coluna EmpresaID, para isso clique
sobre a mesma com o boto direito e selecione Properties (ultima opo).

Localize na janela Properties (como a figura a seguir) a propriedade Identity
Specification e expanda a mesma localizando a propriedade Is Identity.

15 Selecione o valor Yes na propriedade Is Identity. Como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 27

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Quando a propriedade Is Identity esta selecionado o campo em questo fica
sendo auto-numeravel, ou seja, a cada registro adicionado na tabela um valor
definido de forma incremental, um-a-um, automaticamente.

16 Clique com o boto direito sobre o nome da tabela e selecione a opo Table
View. Aqui voc pode escolher entre as varias formas que deseja que a tabela seja
exibida no diagrama. Clique na opo Column Names para que seja apenas
exibido o nome das colunas facilitando a visualizao de varias tabelas j que agora
iremos adicionar outra.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 28

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



17 Antes de prosseguir clique em Save Diagram1 na barra de ferramentas ou
pressione CTRL+S.

18 No exemplo no vou mudar o nome do diagrama, apenas clique em OK.



Note na janela Database Explorer que agora foi adicionado o Diagram1 dentro
de Database Diagrams e tambm foi criada a tabela Empresas.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 29

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Ateno: Durante o curso, se voc estiver utilizando uma verso do Visual Studio
.NET 2005 que no seja uma verso Express entenda que sempre que eu me refirir
a janela Database Explorer no seu caso ser a janela Server Explorer. A janela
Server Explorer mais completa porque tambm permite gerenciar recursos do
servidor e s esta disponvel em verses no Express.

Vamos agora adicionar uma nova tabela no banco de dados. Vou fazer de uma
forma diferente para voc aprender, mas saiba que poderia usar o Diagrama
novamente se desejar.

19 Na janela Database Explorer, clique com o boto direito em Tables e
selecione Add New Table.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 30

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



20 A janela que se abre semelhante a do diagrama quando estvamos criando a
tabela Empresas. Crie duas colunas como mostra a imagem a seguir:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 31

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



21 Vamos definir a coluna TipoID como chave-primaria, para isso clique com o
boto direito sobre a mesma e selecione Set Primary Key.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 32

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



22 Ainda com a coluna TipoID selecionada, note a janela Column Properties
como mostra a imagem a seguir. Selecione Yes para a propriedade Is Identity
para que esta coluna tambm seja auto-numeravel.



23 Na barra de ferramentas clique em Save ou pressione CTRL+S para salvar.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 33

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


24 Digite TipoEmpresa para o nome da tabela e clique em OK como mostra a
imagem:



25 Note na janela Database Explorer que agora temo duas tabelas criadas.



Agora nos vamos fazer um relacionamento entre as tabelas Empresas e
TipoEmpresa, isso porque em nossa aplicao podemos ter cadastradas vrios
tipos de empresas, como por exemplo: Empresas clientes, representantes,
fornecedores, consultores, etc. Cada tipo deste armazenado na tabela
TipoEmpresa. Quando formos cadastrar uma empresa precisaremos informar qual
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 34

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

tipo ela , para isso necessrio o relacionamento. (Conceitos de projeto de banco
de dados como normalizao, modelos, entidade-relacionamento, modelos ER, no
fazem parte do escopo deste curso.)

26 Abra o Diagram1.

27 - Clique com o boto direito do mouse sobre o diagrama e escolha a opo Add
Table como mostra a imagem:



28 Agora na janela Add Table, selecione a tabela TipoEmpresa e clique em Add
para adiconar a mesma no diagrama. Para fechar a janela Add Table clique em
Close.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 35

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A imagem a seguir mostra o diagrama agora com as duas tabelas. Note que na
tabela Empresas temos o campo TipoID. Este campo do tipo int, o mesmo
campo do TipoID da tabela TipoEmpresa. Para fazer um relacionamento entre
duas tabelas necessrio que os dois campos sejam do mesmo tipo.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 36

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



29 Para fazer o relacionamento clique sobre o campo TipoID da tabela
TipoEmpresa e mantendo o boto pressionado arraste at o campo TipoID da
tabela Empresas como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 37

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



exibida a janela Tables and Colums, nela voc pode verificar se o
relacionamento esta sendo feito corretamente e dar um nome para o mesmo. Note
que a coluna TipoID da tabela Empresa conhecido como Foreign key, ou seja,
chave estrangeria. Geralmente um relacionamento sempre feito entre uma chave
primaria (Primary key) e chave estrangeira ou secundria (Foreign key).

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 38

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



31 Clique em OK.

32 - Agora exibida a janela Foreign Key Relationship que permite alterao em
mais algumas propriedades que podem influenciar o relacionamento. No vamos
modificar nada, clique em OK.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 39

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O relacionamento exibido no diagrama como mostra a imagem a seguir. Note que
o relacionameto que criamos do tipo um-para-varios, ou seja, podemos ter
varias empresas com um mesmo tipo e cada empresa s pode ter um tipo.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 40

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



33 Clique em Save ou pressione CTRL+S.

34 - A janela Save exibida informando quais tabelas sero afetadas com as
mudanas efetuadas no diagrama. Clique em Yes.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 41

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A prxima imagem mostra o diagrama com os dados salvos. Voc pode notar que
sempre que fizer uma modificao e no salvar o asterisco (*) ao lado do nome da
janela informa que a mesma no foi salva ainda.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 42

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



35 Vamos agora adicionar alguns dados nas tabelas. Primeiro precisamos
adicionar valores na tabela TipoEmpresa, porque como criamos o relacionamento,
no podemos ter uma Empresa que no tenha um tipo. Para adicionar valores
clique com o boto direito sobre o nome da tabela e selecione Show Table Data.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 43

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A tabela exibida. Como pode perceber no tem nenhum valor cadastrado ainda.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 44

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



36 Digite os valores conforme a imagem abaixo. Note que voc no precisa
digitar nenhum valor na coluna TipoID, adicionado um numero
automaticamente. Isso acontece porque a propriedade Is Identity foi definida
como Yes.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 45

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Agora que j criamos um banco de dados e duas tabelas vamos prosseguir com
nossa aplicao.

37 Adicione um novo formulrio ao projeto (Windows Form) chamado
CadastroEmpresas como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 46

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



38 No menu Data clique em Show Data Sources, ou pressione CTRL+ALT+D.

exibida a janela Data Souces como mostra a imagem:



39 Na janela Data Sources, clique em Add New Data Source.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 47

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


iniciado um assistente que nos a ajuda a criar um Data Source (fonte de dados
ou seja, um mecanismo que permite a manipulao de dados na nossa aplicao).



40 Selecione Database e clique em Next.

41 - O prximo passo selecionar qual banco de dados iremos utilizar, selecione
Projetos.mdf. Note a Connection String (String de conexo) que criada para
acessar o banco de dados, logo a estudaremos a fundo.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 48

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



42 Clique em Next.

43 Ns podemos salvar nossa string de conexo (Connection String) em um
arquivo de configurao. Isso recomendado porque facilita o processo de
disponibilizao da nossa aplicao, ou seja, se voc instalar sua aplicao em um
outro computador e precisar usar um outro caminho para acesso ao banco de
dados, basta mudar a string de conexo do mesmo no arquivo de configurao.
Clique em Yes, save the connection as.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 49

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



44 Clique em Next.

45 - Agora podemos selecionar quais tabelas, stored procedures, etc... queremos
utilizar na nossa aplicao. Vamos selecionar as duas tabelas que criamos como
mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 50

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



46 Clique em Finish.

Agora na janela Solution Explorer foi adicionado um DataSet tipado chamado
ProjetosDataSet como mostra a imagem. Sei que voc esta bem curioso sobre
este objeto, teremos um capitulo aprofundando sobre ele, por enquanto apenas
iremos utiliza-lo para introduzir o assunto.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 51

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



47 De um clique duplo sobre o ProjetoDataSet na janela Solution Explorer para
abrir o mesmo como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 52

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O DataSet possui uma representao das tabelas do nosso banco de dados,
incluindo o relacionamento. Alm disso, ele tem mtodos que permitem a
manipulao dos registros no banco de dados, vamos testar se estes mtodos esto
ok.

48 Clique com o boto direito sobre Fill,GetData() da tabela TipoEmpresa
como mostra a imagem e selecione Preview Data.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 53

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



49 Na janela Preview Data clique em Preview. O contedo da tabela exibido
como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 54

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Isso quer dizer que o mtodo esta recuperando os dados adequadamente.

50 Clique em Close para fechar a janela Preview Data.

51 Note que agora temos as duas tabelas na janela Data Sources. Clique em
Empresas e selecione Details.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 55

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



52 Clique sobre a tabela Empresas na janela Data Sources e mantendo o boto
pressionado arraste e solte no formulrio CadastroEmpresas.

Todos os campos da tabela so adicionados no formulrio como mostra a imagem
abaixo:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 56

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note tambm que foram adicionados quatro controles no projeto:
projetosDataSet
empresasBindingSource
empresasTableAdapter
empresasBindingNavigator

Tambm no vamos nos aprofundar sobre estes controles agora no primeiro
capitulo, apenas saiba que eles so os controles responsveis por manipular os
dados no banco de dados (exibir, inserir, alterar e excluir). O controle
empresasBindingNavigator o responsavel pela barra encima do formulrio que
permite navegar entre os registros.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 57

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

A prxima imagem apenas mostra o formulrio um pouco mais organizado, eu o fiz
manualmente arrastando os controles da forma que mais me agradou.



A imagem abaixo mostra que tambm foi adicionado cdigo automaticamente no
formulrio CadastroEmpresas para manipulao dos dados:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 58

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



53 Na janela Solution Explorer de um clique duplo sobre o Form1 e arraste um
boto (Button) para o mesmo como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 59

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Posteriormente vamos personalizar melhor o Form1, por enquanto apenas vamos
utilizar o boto para abrir o formulrio CadastroEmpresas.

54 De um clique duplo sobre o Button1 e adicione o seguinte cdigo:

Cadast r oEmpr esas f r m= new Cadast r oEmpr esas( ) ;
f r m. Show( ) ;

Seu painel de cdigo deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 60

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



55 Execute a aplicao.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 61

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


56 Clique no sinal de adio (+) na barra superior e adicione alguns valores de
teste. Aps clique no disquete na mesma barra para salvar como mostra a imagem:



57 Pare a execuo da aplicao.

Se voc executar a aplicao novamente vai perceber que aparentemente nenhum
dos registros que voc inseriu na execuo anterior esto l. Essa duvida a
campe que eu recebo nos meus e-mails. Aparentemente parece estar tudo ok,
mas ao parar e executar a aplicao novamente todos os dados somem.

Vamos entender porque isso acontece.

58 Na janela Solution Explorer clique no boto Show All Files como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 62

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Agora todos os arquivos da aplicao sero exibidos.

Note que na pasta na pasta bin\debug esto os arquivos compilados na nossa
aplicao. Toda vez que compilamos/executamos nossa aplicao clicando em
F5 por exemplo esses arquivos so substitudos pelo resultado da compilao feita
nos arquivos de cdigo fonte.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 63

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Perceba que dentro da pasta debug temos um arquivo do banco de dados. Quando
executamos nossa aplicao e adicionamos registros esse o banco modificado e
no o que esta diretamente na pasta dos projetos. Isso quer dizer que sempre que
executamos nossa aplicao esse banco substitudo por aquele, que no tem as
modificaes que fizemos em tempo de execuo. Percebe o problema? Temos dois
bancos de dados, manipulamos em um quando executamos e usamos outro para
projetar.

59 - Para resolver esse problema basta clicar no banco de dados (o original no o
que esta na pasta debug) e na janela Properties mudar a propriedade Copy to
Output Directory para Do not copy. Isso far com que o banco de dados nunca
seja copiado para a pasta debug.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 64

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



S que agora para que sua aplicao funcione adequadamente necessrio uma
mudana no arquivo app.config, que o arquivo de configurao da aplicao.

Note na imagem abaixo que o caminho do banco de dados obtido atravs do
comando DataDirectory que retorna para a aplicao qual o caminho que esta o
arquivo executvel (.exe) da aplicao.



60 Para que a aplicao funcione adequadamente voc precisa digitar
manualmente onde esta o banco de dados que voc quer manipular, como eu fiz na
imagem abaixo:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 65

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




Esse caminho pode variar dependendo de onde voc esta salvando seu projeto no
disco rgido. nesse local que voc configura o caminho do banco de dados
tambm quando estiver instalando a aplicao em uma maquina diferente.

61 Execute a aplicao e note que agora tudo funciona normalmente e os dados
so persistidos a cada compilao. Note tambm que o banco de dados no mais
adicionado na pasta debug.

Voc pode alterar a propriedade Copy to Output Directory em qualquer arquivo
que desejar na sua aplicao, no s em banco de dados.

Quero salientar que esse problema com o banco de dados sendo adicionado na
pasta Debug acontece somente quando adicionamos um banco de dados
diretamente ao nosso projeto, como fizemos neste capitulo ou quando usamos um
banco de dados Access que tambm fica sendo armazenado junto com a aplicao.
Quando voc tem um servidor especifico rodando um banco de dados voc no
precisa se preocupar com isso j que os arquivos do banco de dados esto l. Neste
caso voc apenas vai precisar informar na sua aplicao o nome ou ip do servidor,
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 66

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

o nome do banco de dados e o login e senha para se conectar no banco de dados
como veremos no quando tratarmos em detalhes o assunto de conexo com banco
de dados.

Para finalizarmos este capitulo eu quero apenas fazer mais um ajuste no nosso
formulrio CadastroEmpresas. Como pode perceber na prxima imagem, para se
cadastrar uma empresa necessrio informar um numero no campo Tipo ID que
representa um tipo de empresa, isso por causa do relacionamento que fizemos
entre as duas tabelas: Empresas e TipoEmpresa.



Imagine a seguinte situao: O usurio no sabe o cdigo do tipo da empresa que
ele esta cadastrando. Ele sabe que um fornecedor, mas qual o cdigo do
fornecedor mesmo?

Vamos agora ajuda-lo a solucionar este problema, sem que ele tenha que abrir um
outro formulrios para consultar o cdigo do tipo de empresa.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 67

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

62 Apague o textBox do campo Tipo ID, ele deve chamar tipoIDTextBox e
coloque no seu lugar um controle ComboBox como mostra a imagem:



63 Selecione o ComboBox e clique sobre a seta no canto superior direito
(conhecida como Common Tasks, aqui temos as propriedades mais usadas de
cada controle) como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 68

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



64 Marque a opo Use data bound items, aparecem novas opes como
mostra a janela ComboBox Tasks:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 69

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

65 Na opo Data Souce expanda (clicando em +) Other Data Sources,
Project Data Sources e ProjetosDataSet. Clique em TipoEmpresa como
mostra a imagem:



Foram adicionados no formulrio os controles tipoEmpresaBindingSource e
tipoEmpresaTableAdapter que nos ajudaro a manipular os dados da tabela
TipoEmpresa.

66 Ainda na janela ComboBox Tasks, selecione Nome para Display Member e
TipoID para Value Member. Isso quer dizer que queremos que o ComboBox
mostre o campo Nome e passe o valor do campo tipoID quando selecionado.

67 Na opo Selected Value selecione TipoID em empresaBindingSource
como mostra a prxima imagem. Isso relaciona o valor selecionado da tabela
TipoEmpresa com o campo TipoID da tabela Empresas, o resultado voc vai ver
quando executar a aplicao.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 70

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



68 Execute a aplicao e teste agora a insero e alterao dos registros.



Agora o usurio pode escolher o tipo de empresa facilmente, sem precisar decorar
o cdigo, porque o mesmo esta sendo passado automaticamente para o banco de
dados durante as alteraes e incluses.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 71

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Capitulo 2
Conexo com o banco de dados

No capitulo anterior usamos os assistentes do Visual Studio .NET 2005 para tudo,
neste capitulo vamos utilizar um pouco de cdigo para aprofundar nos
conhecimentos sobre o objeto Connection, que responsvel pela conexo com o
banco de dados. Voc vai aprender tambm a utilizar o objeto Command para
executar comandos SQL e vai conhecer o Connection Pooling e os benefcios que
ele trs para as suas aplicaes.

O processo de conexo com o banco de dados e leitura de registros do mesmo
executado em cinco passos:

1. Criar um objeto de conexo com o banco de dados (Connection).
2. Criar um objeto que vai executar um comando SQL (Command).
3. Abrir o banco de dados.
4. Executar o comando SQL e processar o resultado.
5. Fechar a conexo com o banco de dados.

O objeto utilizado para a conexo com o banco de dados conhecido como
Connection. Para criar este objeto voc vai precisar da string de conexo, que
informa ao objeto sobre como e em qual banco de dados ele deve se conectar.

O objeto utilizado para executar um comando SQL conhecido como Command.
Para criar este objeto voc precisa informar:
Uma instruo SQL;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 72

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

E qual objeto Connection ele deve utilizar para executar.

Se voc estiver utilizando o banco de dados SQL Server vai criar o objeto
Connection assim:

Sql Connect i on conn;
conn = new Sql Connect i on( ) ;

Agora se voc estiver utilizando um banco de dados Access, por exemplo, vai criar
o objeto assim:

Ol eDbConnect i on conn;
conn = new Ol eDbConnect i on( ) ;

Perceba ambas as formas so muito semelhantes, apenas mudando o prefixo. Isso
vai acontecer para qualquer tipo de banco de dados que voc for utilizar, o objeto
praticamente o mesmo porque todos so criados a partir da interface
IDbConnection, definida pelo framework que especifica um modelo comum para
os objetos do ADO.NET. Isso vai facilitar sua vida e aprendizado fazendo com que
independente do banco de dados voc o acesse e manipule da mesma maneira.

Voc pode declarar e inicializar o objeto na mesma linha como mostra o exemplo
para banco de dados SQL Server:

Sql Connect i on conn = new Sql Connect i on( ) ;

E Access:

Ol eDbConnect i on conn = new Ol eDbConnect i on( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 73

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



String de Conexo

Vamos falar agora sobre a string de conexo (Connection String). atravs dela
que vamos informar ao objeto Connection onde esta nosso banco de dados, qual o
seu nome e como se conectar ao mesmo (login e senha, por exemplo).

Uma string de conexo pode receber os seguintes parmetros:

Parmetro Descrio Exemplo
Data Source
- Ou -
Server
Nome ou endereo IP da maquina
que esta rodando o banco de
dados. No caso do Access esse
parmetro recebe o caminho do
arquivo.

Dat a
Sour ce=200. 150. 7. 8; "

ser ver =200. 150. 7. 8;

Dat a
Sour ce=d: \ Nor t hwi nd.
mdb;

Initial Catalog Nome do banco de dados.
I ni t i al
Cat al og=Pr oj et os;
Integrated
Security
Pode receber os valores true, false
ou SSPI (equivalente a true).
Quando true ou SSPI significa que
modo de autenticao com o
servidor integrado ao Windows,
I nt egr at ed
Secur i t y=t r ue;
I nt egr at ed
Secur i t y=SSPI ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 74

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

ou seja, do tipo Windows
Authentication. Quando false
necessrio informar o login e senha
para acesso ao banco de dados,
isso feito atravs dos parmetros
User ID e Password.
User ID
Informa login (nome de usurio)
para conexo com banco de dados.
User I D=Mor oni ;
Password
Informa password (senha) para
conexo com banco de dados.
Passwor d=123456;
Connection
Timeout
Tempo em segundos que o objeto
deve aguardar a resposta do
servidor antes de gerar um erro. O
padro 15 segundos, ou seja, se
o banco de dados no responder
em 15 segundos ser gerado uma
exceo/erro na tentativa de
conexo.
Connect i on
Ti meout =20;
Provider
usado apenas em conexes
OleDBConnection, com Access por
exemplo para especificar qual o
provider ser responsvel pela
conexo.
Pr ovi der =Mi cr osof t . J
et . OLEDB. 4. 0;
Persist Security
Info
Pode receber os valores true ou
false. Se false (o que
recomendado) informaes de
segurana importantes como senha
no so retornadas como parte da
Per si st Secur i t y
I nf o=f al se;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 75

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

conexo se a mesma j estiver
aberta.
User Instance
Pode recebe os valores True ou
False. Se True indica que a
conexo deve rodar sobre a
instancia que esta rodando sobre o
nome do usurio. Usado para SQL
Server Express 2005.
User I nst ance=Tr ue;
Attachdbfilename
Usado com SQL Server Express
Edition para especificar o local onde
esta o arquivo do banco de dados.
At t achDbFi l ename=C: \
dados. mdf ;

No so todos os parmetros que voc vai utilizar em suas strings de conexo.
Voc deve separar os paramentros usando ponto-e-vrgula.

Veja como exemplo uma string de conexo semelhante a que estamos utilizando na
nossa aplicao de exemplo para o banco de dados SQL Server Express 2005:

" Dat a Sour ce=. \ SQLEXPRESS; At t achDbFi l ename=C: \ Pr oj et os. mdf ;
I nt egr at ed Secur i t y=Tr ue; User I nst ance=Tr ue; "

O prximo exemplo mostra uma string de conexo com um banco de dados SQL
Server usando autenticao Windows, ou seja, Windows Authentication:

" Per si st Secur i t y I nf o=Fal se; I nt egr at ed
Secur i t y=SSPI ; dat abase=NomedoBancodeDados; ser ver =MeuSer vi dor SQL; "

O prximo exemplo ilustra uma string de conexo com banco de dados SQL Server
s que desta vez usando autenticao mista, ou seja, Mixed mode
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 76

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

authentication, quando necessrio se logar no prprio banco de dados
informando login e senha:

" Per si st Secur i t y I nf o=Fal se; User I D=*****; Passwor d=*****; I ni t i al
Cat al og=NomedoBancodeDados; Ser ver =MeuSer vi dor SQL"

O exemplo seguinte mostra uma string de conexo com banco de dados Access:

Pr ovi der =Mi cr osof t . J et . OLEDB. 4. 0; Dat a Sour ce=c: \
NomedoBancodeDados. mdb; User I D=Admi n; Passwor d=;

Voc passa a string de conexo para o objeto Connection atravs da propriedade
ConnectionString como mostra o cdigo:

conn. Connect i onSt r i ng = st r conn;

Suponha que strconn no cdigo acima uma varivel do tipo string que armazena
a string de conexo, voc pode passar diretamente tambm.

Voc pode fazer tudo em uma linha, ou seja, criar o objeto Connection, inicializa-lo
e j passar a string de conexo assim:

Sql Connect i on conn = new Sql Connect i on( st r conn) ;

Vamos continuar o exemplo que comeamos no capitulo anterior. Neste capitulo
vamos criar e implementar manualmente um formulrio que se conecta ao banco
de dados e recupera um valor, mas antes de mais nada vamos terminar de criar as
tabelas e relacionamentos que usaremos na nossa aplicao, assim voc j vai
compreender melhor sobre a mesma.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 77

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


1 Abra a aplicao ControleProjetos.



2 Na janela Database Explorer ou Server Explorer se voc estiver usando
uma verso do Visual Studio no Express de um clique duplo sobre o Diagram1
para abrir o mesmo como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 78

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Seu diagrama deve ser exibido como mostra a imagem:


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 79

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Vamos adicionar agora as tabelas que faltam para o nosso projeto. Como voc j
sabe a tabela Empresas e TipoEmpresa so usadas para armazenar os dados das
empresas que sero cadastradas em nosso sistema. Precisamos tambm
armazenar informao sobre os contatos, sobre os projetos e sobre as tarefas que
precisam ser executadas para a concluso de um projeto.

3 Vamos adicionar a tabela Contato, para isso clique com o boto direito sobre o
diagrama e selecione New Table como mostra a imagem:



4 Digite Contato na janela que pergunta o nome da tabela (Choose Name) e
pressione OK.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 80

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




5 Crie as colunas como indicado na prxima imagem:



6 Clique com o boto direito sobre o campo ContatoID e selecione Set Primary
Key como mostra a prxima imagem. Isso define o campo ContatoID como
requerido e nico para a tabela em questo sendo o identificador nico da mesma,
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 81

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

ou seja, podem ter duas pessoas com o mesmo nome, mas no com o mesmo
ContatoID.



7 Clique novamente sobre o campo ContatoID e selecione Properties. Na janela
Properties marque Yes para a propriedade (Is Identity) que esta dentro de
Identity Specification como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 82

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



8 Clique com o boto direito sobre a janela que representa a tabela contato,
selecione Table View e escolha Column Names. Se outras tabelas tambm
estiverem no modo de visualizao Standart faa o mesmo para cada uma delas
como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 83

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Como voc pode perceber na prxima imagem a tabela Contato tem um campo
chamado EmpresaID assim como a tabela Empresas. Esses campos so do
mesmo tipo, ou seja, tipo int. Vamos us-los para relacionar as duas tabelas, assim
quando cadastrarmos um contato podemos relacion-lo com a empresa que ele
trabalha.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 84

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



9 Clique sobre o campo EmpresaID na tabela Empresas e mantendo o boto
pressionado arraste at o campo EmpresaID da tabela Contato como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 85

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A janela Tables and Columns permite alterar o nome do relacionamento e mostra
que entamos relacionando o campo EmpresaID da tabela Empresas (Primary
key table), ou seja a tabela que contem a Primary Key com o campo
EmpresaID da tabela Contato conhecida como Foreign key table ou seja, a
tabela que contem a Foreign key. As duas colunas no precisam ter o mesmo
nome, mas sim o mesmo tipo. Eu costumo dar o mesmo nome para os campos,
mas para quem esta comeando pode ser interessante nomear o campo da chave
primria com o prefixo pk de Primary key e o campo da chave secundria com o
prefixo fk de Foreing key. Ento o campo EmpresaID da tabela Empresas
chamaria pkEmpresaID e o campo EmpresaID da tabela Contato
fkEmpresaID.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 86

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



10 Clique em OK.

11 - A janela Foreign Key Relationship permite fazer mais algumas alteraes no
relacionamento, apenas clique em OK.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 87

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


O relacionamento criado como mostra a imagem:



12 Vamos agora adicionar uma nova tabela chamada Projeto com os campos
que a prxima imagem descreve. No vou detalhar passo-a-passo como fazer a
criao desta tabela, se tiver duvidas consulte os passos anteriores ou o primeiro
capitulo. A chave primaria ser o campo ProjetoID.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 88

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



No esquea de definir a propriedade (Is Identity) do campo ProjetoID como
Yes.

Note tambm que apenas o campo Obs esta marcado na coluna Allow Nulls. Isso
quer dizer que quando voc inserir um registro na tabela Projeto, ou seja, quando
voc for criar um projeto, apenas o campo Obs no obrigatrio, voc vai precisar
informar um nome, empresa, data de inicio e data de fim para inserir o registro.

13 Vamos agora criar uma nova tabela chamada Tarefa como mostra a prxima
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 89

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que todos os campos so obrigatrios menos o campo Fim que deve ser
preenchido apenas quando a tarefa for concluda. A chave primaria o campo
TarefaID e temos uma chave secundria chamada ProjetoID para relacionar uma
tarefa com um projeto.

A prxima imagem mostra nosso diagrama agora com todas as tabelas criadas.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 90

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



14 - Falta apenas relacinarmos a tabela Projeto com Empresas e Tarefa. Faa
isso clicando sobre o campo EmpresaID na tabela Empresas e mantendo o boto
pressionado arraste at o campo EmpresaID da tabela Projeto.
Para o relacionamento entre Projeto e Tarefa clique sobre o campo ProjetoID na
tabela Projeto e arraste para o campo ProjetoID da tabela Tarefa. Clique em Ok
na janela Tables and Columns e na janela Foreign Key Relationship para os
dois relacionamentos. O segredo para os relacionamentos sempre arrastar da
chave primaria para a secundria. A prxima imagem mostra o diagrama com os
relacionamentos criados:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 91

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O diagrama acima mostra que cada empresa pode ter vrios projetos, mas um
projeto s pode estar relacionado a uma empresa. O mesmo acontece em relao
tabela Projeto e Tarefa. Cada Empresa tambm pode ter vrios contatos, mas um
contato s pode ser relacionado a uma empresa. O relaciomento entre empresas e
tipo de empresa foi tratado no capitulo anterior.

15 Clique em Save Diagram1 ou pressione Ctrl+S.

16 A prxima janela apenas mostra todas as tabelas que sero afetas com as
alteraes, clique em Yes.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 92

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Agora que todas as tabelas esto criadas vamos voltar agora ao nosso assunto
inicial deste capitulo, o objeto Connection e a string de conexo. Para o exemplo
prtico sobre esse assunto continue com o exerccio:

17 - Adicione um novo formulrio (Form) aplicao, para isso na janela Solution
Explorer clique com o boto direito sobre o nome do projeto, selecione Add e
clique em New Item.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 93

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



18 Na janela Add New Item selecione Windows Form. Em Name digite
CadastroContato como mostra a prxima imagem e clique em Add.



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 94

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O novo formulrio (Form) adicionado como mostra a imagem:



19 Na Toolbox localize o controle Label e adicione um no formulrio como
mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 95

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



20 De um clique duplo sobre o formulrio para criar o procedimento do evento
Load do mesmo como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 96

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O evento Load executado sempre que o formulrio aberto.

Adicione o seguinte cdigo dentro do evento CadastroContato_Load como mostra
a prxima imagem:

St r i ng st r Conn;
st r Conn = @" Dat a
Sour ce=. \ SQLEXPRESS; At t achDbFi l ename=C: \ Pr oj et os\ Cont r ol ePr oj et os\ Cont
r ol ePr oj et os\ Pr oj et os. mdf ; I nt egr at ed Secur i t y=Tr ue; User
I nst ance=Tr ue" ;
Sql Connect i on conn;
conn = new Sql Connect i on( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 97

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

conn. Connect i onSt r i ng = st r Conn;





Note na imagem acima que adicionei referencia ao namespace
System.Data.SqlClient. Se voc no fizer isso ao invs do cdigo:

Sql Connect i on conn;

Voc vai precisar fazer assim:

Syst em. Dat a. Sql Cl i ent . Sql Connect i on conn;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 98

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Ou seja, vai precisar fazer referencia ao namespace na hora que for declarar cada
objeto usado no ADO.NET.

Vamos dar uma analizada no cdigo:

Primeiro ns declaramos uma varivel chamada strConn que vai armazenar a
string de conexo:
St r i ng st r Conn;

Depois ns criamos a string de conexo usando os parmetros Data Source,
AttachDbFilename, Integrated Security e User Instance.

st r Conn = @" Dat a
Sour ce=. \ SQLEXPRESS; At t achDbFi l ename=C: \ Pr oj et os\ Cont r ol ePr oj et os\ Cont
r ol ePr oj et os\ Pr oj et os. mdf ; I nt egr at ed Secur i t y=Tr ue; User
I nst ance=Tr ue" ;

S ento ns criamos uma varivel do tipo SqlConnection, iniciamos o objeto e
atribumos o valor da string de conexo ao objeto.

Sql Connect i on conn;
conn = new Sql Connect i on( ) ;
conn. Connect i onSt r i ng = st r Conn;

Ns poderamos ter feito isso tudo em apenas uma linha, desta forma:

Sql Connect i on conn = new Sql Connect i on( st r Conn) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 99

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O cdigo acima declara a varivel, inicia e inicia o objeto j passando a string de
conexo por parmetro.

21 Vamos agora adicionar o seguinte cdigo:

Sql Command cmd;
cmd = new Sql Command( ) ;
cmd. CommandText = " SELECT COUNT( *) FROM Cont at o" ;
cmd. Connect i on = conn;

conn. Open( ) ;
l abel 1. Text = cmd. Execut eScal ar ( ) . ToSt r i ng( ) ;
conn. Cl ose( ) ;

Veja como vai ficar no painel de cdigo:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 100

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O objeto SqlCommand (Command) utilizado para executar um comando SQL.
Para que ele possa fazer isso voc precisa informar para o mesmo:
1. O comando SQL.
2. O objeto de conexo (Connection) que ele vai utilizar para executar o
comando SQL.

As seguintes linhas de cdigo foram usadas para declarar uma varivel do tipo
SqlCommand e iniciar o objeto:

Sql Command cmd;
cmd = new Sql Command( ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 101

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

A propriedade do objeto SqlCommand que recebe o comando SQL a
CommandText como mostra o cdigo:

cmd. CommandText = " SELECT COUNT( *) FROM Cont at o" ;

O comando SQL (SELECT COUNT) que vamos utilizar tem o objetivo de retornar o
numero de registros que temos na tabela Contato.

A propriedade do objeto SqlCommand que recebe qual conexo ser utilizada a
Connection como mostra o cdigo:

cmd. Connect i on = conn;

O cdigo seguinte usado para abrir a conexo, executar o comando SQL e fechar
a conexo:

conn. Open( ) ;
l abel 1. Text = cmd. Execut eScal ar ( ) . ToSt r i ng( ) ;
conn. Cl ose( ) ;

Para executar o objeto Command voc tem trs mtodos principais:

ExecuteScalar utilizado quando queremos retornar apenas um valor,
como o que fizemos neste exemplo. Se o resultado da consulta SQL for
retornar mais do que um valor o mtodo ExecuteScalar vai retornar o
resultado da primeira linha com a primeira coluna ou seja, o primeiro campo
que encontrar.
ExecuteReader utilizado para retornar um conjunto de registros atravs
do comando SQL Select por exemplo, ele frequentemente utilizado
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 102

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

associado a outro objeto, conhecido como DataReader que vai ajudar na
leitura destes registros.
ExecuteNonQuery utilizado quando voc no espera retorno algum,
como um comando INSERT, UPDATE ou DELETE.

Vamos agora testar nossa aplicao.

22 - Na janela Solution Explorer localize e abra o Form1. Arraste mais um boto
para este formulrio como mostra a imagem:



23 De um clique duplo sobre o boto que voc acabou de adicionar e dentro do
procedimento de evento Click do mesmo digite o seguinte cdigo:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 103

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Cadast r oCont at o f r m= new Cadast r oCont at o( ) ;
f r m. Show( ) ;

Seu painel de cdigo vai ficar assim:



Este cdigo responsvel por abrir o formulrio CadastroContato.

24 Execute sua aplicao. Clique sobre o Button2 para abrir o formulrio
CadastroContato:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 104

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O valor 0 (zero) exibido porque no temos nenhum registro cadastrado na nossa
tabela Contato, no entanto o comando foi executado corretamente retornando o
valor de registros que temos na tabela, ou seja, nenhum.

25 Na janela Database Explorer (ou Server Explorer dependendo da sua verso
do Visual Studio 2005) localize a tabela Contato, clique com o boto direito sobre a
mesma e selecione Show Table Data como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 105

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



26 Adicione alguns registros na tabela como mostra a imagem a seguir:



27 Execute novamente a aplicao e perceba que o numero de registros
retornado agora diferente de zero e igual ao numero de contatos que voc
adicionou na tabela como mostra a imagem:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 106

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS





Recuperando a string de conexo de um arquivo de configurao

Como voc viu anteriormente ns estamos colocando nossa string de conexo
diretamente no cdigo antes de criar o objeto Connection. Isso no muito
produtivo, porque geralmente o caminho do banco de dados muda, usamos um
para desenvolver a aplicao e provavelmente nosso cliente ter outro. Se nossa
aplicao vai ser disponibilizada para vrios clientes o problema ainda maior
porque da forma que fizemos toda vez que mudar algum parmetro na string de
conexo vamos precisar abrir o banco de dados e modificar o parmetro em cada
local que tivermos criado a string de conexo, compilar o programa denovo e ento
disponibilizar o mesmo para o uso. Imagine o problema em uma aplicao grande
com vrios formulrios.

Para contornar este problema o ideal termos a string de conexo em um s local
e que este local seja fcil de ser modificado sem que nossa aplicao precise ser
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 107

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

compilada denovo, ou seja, o local ideal um arquivo de configurao separado,
que fique acessvel para a aplicao. Esse arquivo o app.config, falamos sobre
ele no primeiro capitulo.

A imagem a seguir mostra o contedo deste arquivo:



Nele temos j temos configurada a string de conexo que criamos e alteramos no
primeiro capitulo.

O nome da nossa string de conexo ProjetosConnectionString como voc pode
ver no arquivo, voc vai precisar deste nome para acessar o contedo
programaticamente.

O seguinte cdigo retorna a string de conexo:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 108

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osConnect i onSt r i ng
" ] . ToSt r i ng( ) ;

O cdigo acima acessa a string de conexo atravs o mtodo Default da classe
Settings que esta dentro do namespace ControleProjetos.Properties.
ControleProjetos o namespace principal da nossa aplicao que foi criado
automaticamente quando criamos a mesma.

28 No formulrio CadastroContato localize a seguinte linha de cdigo:

st r Conn = @" Dat a
Sour ce=. \ SQLEXPRESS; At t achDbFi l ename=C: \ Pr oj et os\ Cont r ol ePr oj et o
s\ Cont r ol ePr oj et os\ Pr oj et os. mdf ; I nt egr at ed Secur i t y=Tr ue; User
I nst ance=Tr ue" ;

29 Altere para o seguinte:

st r Conn =
Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osConnect i on
St r i ng" ] . ToSt r i ng( ) ;

Agora toda vez que formos utilizar nossa string de conexo vamos usar o cdigo
acima para recuperar a mesma do arquivo app.config, sendo assim facilitada a
manuteno futura.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 109

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Connection Pooling

Para finalizar este capitulo quero abordar um ltimo assunto que associado
diretamente conexo com o banco de dados, este recurso o Connection
Pooling ou Pool (grupo) de conexes.

O processo de abertura de conexo com o banco de dados exige certo volume de
carga no servidor, principalmente em aplicaes Web onde a abertura e
fechamento das conexes so feitas varias vezes e em curtos perodos de tempo.
Visando minimizar essa carga no servidor foi implementado um recurso (Connection
Pooling) que atua como uma fila de conexes. Na pratica o que acontece que
quando voc fecha sua conexo com o banco de dados ela no fechada (isso no
quer dizer que voc no precise fechar a conexo) e sim fica disponvel no Pool de
conexes, quando uma nova conexo aberta verificado se tem uma conexo no
Pool com as mesmas caractersticas, se sim essa conexo utilizada s se no tiver
uma conexo disponivel ser aberta uma nova com o banco de dados. Isso quer
dizer que uma conexo pode ser reaproveitada atravs do recurso Connection
Pooling melhorando a performance e escalabilidade da aplicao.

Cada provider implementa o Connection Pooling da sua prpria maneira mas
sempre com o mesmo objetivo. O provider para o SQL Server, por exemplo, s
permite re-uso de conexes com a mesma string de conexo. Se algum dos
paramentros da string de conexo for diferente criado um novo Pool de conexes.

As conexes que esto no Pool ficam disponveis por um determindo perodo de
tempo. Tambm temos um limite das conexes que podem ficar no Pool para
serem re-aproveitadas, mas isso feito de forma transparente para ns,
programadores.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 110

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


O Connection Pooling habilitado por padro, mas se voc desejar desabilitar
esse recurso voc o faz na string de conexo adicionando o parmetro Pooling
com valor false como mostra o exemplo:

" Per si st Secur i t y I nf o=Fal se; User I D=*****; Passwor d=*****; I ni t i al
Cat al og=NomedoBancodeDados; Ser ver =MeuSer vi dor SQL; Pool i ng=Fal se; "

Voc pode fazer algumas configuraes adicionais no Pool de conexes na string de
conexo tambm, a seguinte tabela mostra algumas:

Parmetro Descrio Exemplo
Connection
Lifetime
Quando uma conexo retorna para
o Pool, o tempo de criao
comparado com a hora exata que
ela retornou para o Pool. A conexo
destruda se esse valor for maior
do que o definido no parmetro
Connection Lifetime. Se
configurado com valor 0 (zero) que
o padro, a conexo fica
disponvel o maximo possvel at o
timeout.
Connect i on
Li f et i me=60
Max Pool Size
Configura o numero mximo de
conexes permitidas no Pool.
Max Pool Si ze=100
Min Pool Size
Configura o numero mnimo de
conexes para o Pool.
Mi n Pool Si ze=0


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 111

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Capitulo 3
ADO.NET e o modelo desconectado

Neste capitulo vamos deixar um pouco de lado o objeto Command que
aprendemos no capitulo anterior para explorar um pouco essa grande novidade que
o ADO.NET trouxe para os desenvolvedores de aplicaes que o modelo
desconectado do banco de dados onde voc pode manipular dados sem que a
conexo esteja aberta.

Na pratica o que acontece que voc conecta no banco as informaes
recuperadas so colocadas em um objeto chamado Dataset, logo depois a conexo
desfeita. Voc ento manipula os dados no objeto Dataset sem estar conectado
com o banco de dados. S quando voc desejar persistir as alteraes feitas ento
conexo refeita e os dados salvos no banco de dados. Isso muito til
principalmente em aplicaes que rodam em laptops e dispositivos movis.

Vamos aprender mais sobre o modelo desconectado na pratica.

O objeto Dataset

1 Abra a aplicao ControleProjetos.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 112

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



2 Na janela Solution Explorer abra o formulrio CadastroContato.

Primeiro vou mostrar pra voc como criar um objeto DataSet programaticamente.
Logo depois voc vai conhecer os novos recursos que o Visual Studio 2005 tem
para nos ajudar a criar este objeto e usa-lo em nossos programas.

3 Arraste para o formulrio CadastroContato um controle DataGridView, um
controle ListBox e um Button organizando-os como a seguinte imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 113

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



4 De um clique duplo sobre o Button1 e no procedimento de evento criado digite
o seguinte cdigo:

Dat aSet ds = new Dat aSet ( ) ;

St r i ng st r Conn =
Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osConnect i onSt r i ng
" ] . ToSt r i ng( ) ;

Sql Connect i on conn = new Sql Connect i on( st r Conn) ;

Sql Dat aAdapt er da = new Sql Dat aAdapt er ( " sel ect * f r om
cont at o" , conn) ;

da. Fi l l ( ds) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 114

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


dat aGr i dVi ew1. Dat aSour ce = ds. Tabl es[ 0] ;


Seu painel de cdigo deve estar como mostra a prxima imagem:



5 Execute sua aplicao e entre no formulrio CadastroContato. Clique no
Button1 e perceba que os dados da tabela Contato so exibidos no
DataGridView como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 115

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Vamos entender um pouco o cdigo:

Primeiro ns criamos um objeto DataSet chamado ds e j o inicializamos (new
DataSet()) , o termo certo em orientao a objetos seria instaciamos (criar uma
instancia do objeto) como mostra o cdigo:

Dat aSet ds = new Dat aSet ( ) ;

Se ns precisarmos fazer qualquer manipulao de dados em um banco de dados
ento necessrio o uso do objeto Connetion e como voc aprendeu no capitulo
anterior para us-lo precisamos informar a string de conexo. O cdigo a seguir
recupera o valor da string de conexo do arquivo de configurao app.config e cria
um objeto Connection chamado conn.

St r i ng st r Conn =
Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osConnect i onSt r i ng
" ] . ToSt r i ng( ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 116

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Sql Connect i on conn = new Sql Connect i on( st r Conn) ;

O objeto SqlDataAdapter pode ser novo para voc. Com o seguinte cdigo um
objeto DataAdapter para recuperar os registro da tabela Contato usando o objeto
Connection que acabamos de criar. A forma que criamos o objeto DataAdapter
foi muito semelhate a que criamos o objeto Command no capitulo anterior, no
entanto a forma de usar bem diferente porque este objeto gerencia a conexo
com o banco de dados automaticamente.

Sql Dat aAdapt er da = new Sql Dat aAdapt er ( " sel ect * f r om
cont at o" , conn) ;

O mtodo Fill do objeto DataAdapter utilizado para preencher os registros que
ele recupera do banco de dados em um objeto DataSet. Como pode ver, para
executar o mtodo Fill no necessrio nem abrir, nem fechar a conexo como
fizemos com o objeto Command no capitulo anterior. O DataAdapter gerencia a
conexo sozinho e aps a execuo do comando Fill os dados j esto no objeto
DataSet e a conexo desfeita do banco de dados. O cdigo seguinte foi usado para
preecher o DataSet ds.

da. Fi l l ( ds) ;

Os dados que esto no objeto DataSet podem ser usados de diversas maneiras e
em vrios controles, principalmente os que possuem a propriedade DataSource,
como o DataGridView. Nesses controles voc pode passar o DataSet como
parmetro. Um objeto DataSet pode conter vrias tabelas, por isso importante
informar qual tabela utilizar no DataSource. Voc pode fazer isso de duas formas,
uma indicando o nome da tabela e outro o ndice da mesma. Como s temos uma
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 117

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

tabela no DataSet ela possui o ndice zero (0) que foi informado usando o cdigo
abaixo:

dat aGr i dVi ew1. Dat aSour ce = ds. Tabl es[ 0] ;

A primeira tabela que adicionamos ao DataSet tem sempre o ndice 0. A segunda 1
e assim por diante. Para dar um nome para uma tabela voc precisa passar mais
um parmetro no mtodo Fill como mostra o cdigo:

da. Fi l l ( ds, " Cont at o" ) ;

Ento voc poderia ao invs de informar o ndice passar o nome da tabela como o
seguinte cdigo:

dat aGr i dVi ew1. Dat aSour ce = ds. Tabl es[ " Cont at o" ] ;

Para adicionar uma segunda tabela no DataSet voc pode usar o mesmo objeto
DataAdapter informando um outro comando SQL ou pode usar um segundo objeto
DataAdapter. Faremos um exemplo adiante.

Vamos agora aprender a utilizar o DataSet em objetos como o ListBox e
ComboBox.

6 Adicione o seguinte cdigo no procedimento de evento Click do Button1:

l i st Box1. Dat aSour ce = ds. Tabl es[ 0] ;
l i st Box1. Di spl ayMember = " Nome" ;
l i st Box1. Val ueMember = " Cont at oI D" ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 118

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Seu painel de cdigo deve estar assim:



7 Execute sua aplicao. Veja que agora o ListBox esta preenchido com o nome
dos clientes como mostra a imagem.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 119

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Para controles como o ListBox e ComboBox voc precisa alm de informar o
DataSource, informar tambm os valores para as propriedades DisplayMember e
ValueMember.

DisplayMember a coluna que vai ser exibida no controle. Para cada item exibido
no DisplayMember podemos associar um cdigo (a chave primaria da tabela o
mais comum como fizemos). Lembre-se que podemos ter dois clientes com o
mesmo nome, mas no com o mesmo cdigo. o cdigo que iremos recuperar do
controle se precisarmos recuperar outros valores da tabela clientes por ele ser
nico.

8 - O objeto DataSet armazena os dados no formato XML. Isso muito bom
porque facilita a integrao entre sistemas. Para voc ver como os dados so
armazenados em XML no DataSet digite o seguinte cdigo dentro do procedimento
Click do Button1.

ds. Wr i t eXml ( @" c: \ cont at o. xml " ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 120

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O mtodo WriteXml permite gravar em um arquivo o conteudo do DataSet.

Seu painel de cdigo deve estar assim:



9 Agora execute sua aplicao e teste novamente.

Veja que o arquivo criado tem os dados da tabela conforme nosso comando SQL no
formato XML. Esse arquivo pode ser facilmente transportado ou usado por outras
aplicaes.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 121

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Voc pode utilizar o mtodo ReadXML para popular (carregar) o objeto DataSet
com os dados de um arquivo XML ao invs de usar o objeto DataAdapter. Basta
passar o arquivo por parmetro desta forma, por exemplo:

ds. ReadXml ( @" c: \ cont at o. xml " ) ;


10 - O DataSet tambm tem associado a ele um XML Schema (XSD) que serve
para validar os os dados do documento XML. Para visualizar em um arquivo voc
pode usar o mtodo WriteXmlSchema. Adicione o seguinte cdigo na sua
aplicao novamente dentro do procedimento de evento Click do Button1.

ds. Wr i t eXml Schema( @" c: \ cont at o. xsd" ) ;

Seu painel de cdigo deve estar assim:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 122

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




11 Execute sua aplicao.

Se voc abrir o arquivo XSD criado no Visual Studio poder ver na janela Properties
as propriedades que validam cada campo como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 123

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Agora se voc abrir o arquivo XSD no Bloco de Notas ver o seguinte contedo:


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 124

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


O contedo acima segue os padres para arquivos XSD e descreve exatamente
quais colunas, seus tipos e outras propriedades que podem ser usadas para validar
o contedo de um asquivo XML.

Se voc utilizar o mtodo ReadXML para popular o banco de dados com um
arquivo XML poder tambm carregar o XSD do arquivo XML em questo. Para isso
voc utiliza o mtodo ReadXMLSchema como mostra o exemplo:

ds. ReadXml Schema( @" c: \ cont at o. xsd" ) ;

Como comentamos um objeto DataSet pode armazenar mais do que uma tabela.
Mas no s isso, ele pode tambm armazenar relacionamentos entre tabelas.
Com isso podemos ter uma representao inteira de um banco de dados em um
objeto DataSet, com suas tabelas e relacionamentos, mas lembre-se, um objeto
DataSet fica armazenado na memria da maquina, ento no muito produtivo
ter muitos dados nele ao mesmo tempo.

Cada tabela dentro de um DataSet conhecida como DataTable. O cdigo a
seguir mostra como podemos criar uma DataTable:

Dat aTabl e dt = new Dat aTabl e( ) ;

A propriedade TableName do objeto DataTable usado para dar um nome a
tabela que este objeto representa, como mostra o cdigo:

dt . Tabl eName = " Est ado" ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 125

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Cada objeto DataTable pode possuir colunas, conhecidas como DataColumn. O
seguinte cdigo cria um objeto do tipo DataColumn:

Dat aCol umn dcEst adoI D = new Dat aCol umn( ) ;

A propriedade ColumnName do objeto DataColumn informa o nome da coluna:

dcEst adoI D. Col umnName = " pkEst adoI D" ;

A propriedade DataType do objeto DataColumn informa o tipo de dado que a
coluna pode receber como mostra o cdigo:

dcEst adoI D. Dat aType = Syst em. Type. Get Type( " Syst em. I nt 32" ) ;

A propriedade DataType pode receber os seguintes tipos de dados do .NET
Framework:

System.Boolean
System.Byte
System.Char
System.DateTime
System.Decimal
System.Double
System.Int16
System.Int32
System.Int64
System.SByte
System.Single
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 126

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

System.String
System.TimeSpan
System.UInt16
System.UInt32
System.UInt64

A propriedade ReadOnly do objeto DataColumn informa se a coluna apenas
leitura. Ela pode receber valor true ou false:

dcEst adoI D. ReadOnl y = t r ue;

A propriedade AllowDBNull do objeto DataColumn informa se a coluna pode
receber valores nulos. Ela pode receber valor true ou false:

dcEst adoI D. Al l owDBNul l = f al se;

A propriedade Unique do objeto DataColumn informa se a coluna pode ter
registros com valores duplicados. Ela pode receber valor true ou false:

dcEst adoI D. Uni que = t r ue;

A propriedade AutoIncrement do objeto DataColumn permite que um valor
numrico seja adicionado automaticamente, como fizemos com as chaves primarias
no nosso banco de dados do exemplo. Quando essa propriedade recebe o valor
true precisamos modificar tambm as propriedades AutoIncrementSeed (numero
de inicio) e AutoIncrementStep (quantos valores sero adicionados). O cdigo a
seguir habilita o auto incremento iniciando com o valor 1 e aumentando de 1 em 1.

dcEst adoI D. Aut oI ncr ement = t r ue;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 127

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

dcEst adoI D. Aut oI ncr ement Seed = 1;
dcEst adoI D. Aut oI ncr ement St ep = 1;

A propriedade Caption do objeto DataColumn permite informar um texto
descritivo mais amigvel do que o nome da coluna:

dcEst adoI D. Capt i on = " Cdi go" ;

A propriedade DefaultValue do objeto DataColumn permite atribuir um valor
padro para a coluna. claro que no faz sentido usar essa propriedade com uma
coluna auto incremental.

dcEst adoI D. Def aul t Val ue = 1;

12 Adicione mais um Button ao formulrio CadastroContato como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 128

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



13 De um clique duplo sobre o Button2 e digite o seguinte cdigo dentro do
procedimento do evento button2_Click criado:

Dat aTabl e dt = new Dat aTabl e( ) ;
dt . Tabl eName = " Est ado" ;

Dat aCol umn dcEst adoI D = new Dat aCol umn( ) ;
dcEst adoI D. Col umnName = " pkEst adoI D" ;
dcEst adoI D. Dat aType = Syst em. Type. Get Type( " Syst em. I nt 32" ) ;
dcEst adoI D. ReadOnl y = t r ue;
dcEst adoI D. Al l owDBNul l = f al se;
dcEst adoI D. Uni que = t r ue;
dcEst adoI D. Aut oI ncr ement = t r ue;
dcEst adoI D. Aut oI ncr ement Seed = 1;
dcEst adoI D. Aut oI ncr ement St ep = 1;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 129

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

dcEst adoI D. Capt i on = " Cdi go" ;

Dat aCol umn dcEst ado = new Dat aCol umn( ) ;
dcEst ado. Col umnName = " Est ado" ;
dcEst ado. Dat aType = Syst em. Type. Get Type( " Syst em. St r i ng" ) ;
dcEst ado. Al l owDBNul l = f al se;
dcEst ado. Uni que = t r ue;

O cdigo acima cria uma DataTable chamada Estado e cria tambm duas
DataColumn, uma chamada pkEstadoID e outra chamada EstadoID. Seu painel
de cdigo deve estar como a imagem:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 130

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

14 - Perceba que no cdigo anterior criamos as duas DataColumn (colunas)
separadas da DataTable. Precisamos agora adicionar as colunas criadas a
DataTable Estado, para isso usamos o mtodo Add como mostra o cdigo:

dt . Col umns. Add( dcEst adoI D) ;
dt . Col umns. Add( dcEst ado) ;

Seu painel de cdigo agora com o cdigo que adiciona as colunas na DataTable
Estado:



Agora que criamos nossa tabela (DataTable) vamos adicionar registros nela. Para
isso vamos utilizar o DataRow como mostra o cdigo:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 131

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Dat aRow r ow;
r ow = dt . NewRow( ) ;
r ow[ " Est ado" ] = " PR" ;
dt . Rows. Add( r ow) ;

Como voc pode ver no cdigo acima, primeiro declaramos o DataRow (demos no
exemplo o nome de row para o mesmo). Depois atribumos a ele o retorno o
mtodo NewRow da DataTable Estado que criamos. Ento atribumos o valor PR
a coluna Estado. Se tivssemos mais colunas poderamos atribuir valor a cada uma
delas da mesma forma, apenas mundando o nome da coluna. Ento para finalizar
adicionamos a linha a nossa DataTable Empresa usando o mtodo Add. Perceba
que no atribumos valor para a coluna pkEstadoID poque quando criamos a
mesma definimos que ela iria receber valor automaticamente.

15 - Adicione o seguinte cdigo para inserir dois registros na DataTable:

Dat aRow r ow;
r ow = dt . NewRow( ) ;
r ow[ " Est ado" ] = " PR" ;
dt . Rows. Add( r ow) ;
r ow = dt . NewRow( ) ;
r ow[ " Est ado" ] = " SP" ;
dt . Rows. Add( r ow) ;

Seu painel de cdigo agora deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 132

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



16 Agora que criamos a DataTable e adicionamos dados a mesma, precisamos
adiciona-la ao nosso objeto DataSet. Como criamos o DataSet dentro do mtodo
que executado pelo evento button1_Click ele s esta disponvel para ser
acessado dentro deste mtodo. Ento antes de qualquer coisa vamos mover a linha
que cria objeto DataSet de dentro do evento button1_Click para fora do mesmo
(escopo da classe) como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 133

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



17 - Agora com o objeto no escopo da classe podemos acess-lo de qualquer
mtodo, por isso adicione o seguinte cdigo dentro do mtodo button2_Click
como mostra a prxima imagem:

ds. Tabl es. Add( dt ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 134

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Se voc aps utilizar o mtodo WriteXML agora ver que temos duas tabelas no
mesmo DataSet e como elas so organizadas no documento XML.

18 Adicione mais um Button e um ComboBox no formulrio CadastroContato
como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 135

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



19 De um clique duplo sobre o Button3 e adicione o seguinte cdigo:

comboBox1. Dat aSour ce = ds. Tabl es[ " Est ado" ] ;
comboBox1. Di spl ayMember = " Est ado" ;
comboBox1. Val ueMember = " pkEst adoI D" ;

Seu painel de cdigo deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 136

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



20 Execute sua aplicao e no formulrio CadastroContato clique em cada um
dos botes do 1 ao 3 para testar. Agora seu DataSet usado tanto para
apresentar os contatos como os estados.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 137

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O objeto DataAdapter

Como voc j aprendeu, o objeto DataAdapter o responsvel por fazer a ligao
entre o objeto DataSet e o banco de dados. Mas ele no serve apenas para fazer
consultas (comando SELECT), pode ter associado e ele tambm comandos para
insero (INSERT), atualizao (UPDATE) e excluso (DELETE) de dados.

O objeto DataAdapter recebe quatro paramentros principais:
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand

O parametro SelectCommand sempre utilizado associado a uma consulta
(comando SELECT) no banco de dados, como fizemos no exemplo anterior
mostrado no prximo cdigo:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 138

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Sql Dat aAdapt er da = new Sql Dat aAdapt er ( " sel ect * f r om
cont at o" , conn) ;

No cdigo acima criamos o SelectCommand na hora que instaciamos a classe
SqlDataAdapter porque passamos por parmetro o comando SQL e o objeto
Connection (conn).

Vamos agora implementar o InsertCommand, UpdateCommand e
DeleteCommand que sero usados para inserir, atualizar e excluir dados do banco
de dados usando o DataSet.

21 Primeiro vamos deixar nosso objeto DataAdapter disponvel (acessvel) a
todos os mtodos da classe. Para isso coloque o seguinte cdigo logo abaixo do que
cria o objeto DataSet no escopo da classe como mostra a prxima imagem:

Sql Dat aAdapt er da = new Sql Dat aAdapt er ( ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 139

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Este cdigo apenas cria um objeto do tipo SqlDataAdapter. Como no passamos
nenhum parmetro para o mesmo no ser criado automaticamente o
InsertCommand por isso vamos faze-lo agora:

22 Como estamos criando o objeto na classe precisamos remover o cdigo que
cria o objeto DataAdapter que esta dentro do mtodo button1_Click, o cdigo
o seguinte:

Sql Dat aAdapt er da = new Sql Dat aAdapt er ( " sel ect * f r om
cont at o" , conn) ;

23 - Agora no temos mais o SelectCommand criado ento precisamos faze-lo
separadamente da instanciao adicionando o seguinte cdigo no lugar do que
acabamos de remover como mostra a prxima imagem:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 140

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


da. Sel ect Command = new Sql Command( ) ;
da. Sel ect Command. CommandText = " sel ect * f r omcont at o" ;
da. Sel ect Command. Connect i on = conn;



Perceba no cdigo acima que o SelectCommand recebe um objeto SqlCommand,
o mesmo que usamos no capitulo anterior. Isso porque o DataAdapter utiliza o
objeto Command para executar os comando SQL. Os parmetros que passamos j
so conhecidos por voc e necessrios sempre que formos utilizar o Command.

24 Agora vamos adicionar o cdigo para o InsertCommand, que responsvel
pela insero de dados:

da. I nser t Command = new Sql Command( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 141

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

da. I nser t Command. CommandText = " I NSERT I NTO Cont at o
( Empr esaI D, Nome, Car go, Tel ef one, Cel ul ar , Ender eco, Ci dade, UF, CEP,
Emai l , Dat aNasci ment o, Obser vacao) Val ues ( @Empr esaI D, @Nome, @Car go,
@Tel ef one, @Cel ul ar , @Ender eco, @Ci dade, @UF, @CEP, @Emai l ,
@Dat aNasci ment o, @Obser vacao) " ;
da. I nser t Command. Par amet er s. Add( " @Empr esaI D" ,
Sql DbType. I nt , 4, " Empr esaI D" ) ;
da. I nser t Command. Par amet er s. Add( " @Nome" ,
Sql DbType. Var Char , 50, " Nome" ) ;
da. I nser t Command. Par amet er s. Add( " @Car go" ,
Sql DbType. Var Char , 50, " Car go" ) ;
da. I nser t Command. Par amet er s. Add( " @Tel ef one" ,
Sql DbType. Var Char , 15, " Tel ef one" ) ;
da. I nser t Command. Par amet er s. Add( " @Cel ul ar " ,
Sql DbType. Var Char , 15, " Cel ul ar " ) ;
da. I nser t Command. Par amet er s. Add( " @Ender eco" ,
Sql DbType. Var Char , 50, " Ender eco" ) ;
da. I nser t Command. Par amet er s. Add( " @Ci dade" ,
Sql DbType. Var Char , 50, " Ci dade" ) ;
da. I nser t Command. Par amet er s. Add( " @UF" , Sql DbType. Var Char ,
2, " UF" ) ;
da. I nser t Command. Par amet er s. Add( " @CEP" , Sql DbType. Var Char ,
9, " CEP" ) ;
da. I nser t Command. Par amet er s. Add( " @Emai l " ,
Sql DbType. Var Char , 50, " Emai l " ) ;
da. I nser t Command. Par amet er s. Add( " @Dat aNasci ment o" ,
Sql DbType. Dat eTi me, 50, " Dat aNasci ment o" ) ;
da. I nser t Command. Par amet er s. Add( " @Obser vacao" ,
Sql DbType. Text , 50, " Obser vacao" ) ;
da. I nser t Command. Connect i on = conn;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 142

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Seu painel de cdigo deve estar como a imagem:



Note que no comando INSERT substitumos os valores por parmetros. Parmetros
sempre tm antes de seu nome o smbolo de @. Quando utilizamos parametros no
comando SQL, precisamos adicionar os mesmos na coleo de parmetros do
comando em questo como fizemos utilizando, por exemplo, o cdigo:

da. I nser t Command. Par amet er s. Add( " @Emai l " ,
Sql DbType. Var Char , 50, " Emai l " ) ;

Para adicionar um parmetro precisamos informar o nome do mesmo que precisa
ser idntico ao usado no comando, o tipo de dados que o parmetro recebe de
acordo com o banco e dados (no caso do SQL Server o tipos esto disponveis no
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 143

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

enumerador SqlDbType), o tamanho do campo e o nome da coluna no banco de
dados que o parmetro representa.

25 Vamos agora adicionar o cdigo para o UpdateCommand como segue:

da. Updat eCommand = new Sql Command( ) ;
da. Updat eCommand. CommandText = " UPDATE Cont at o SET
Empr esaI d = @Empr esaI D, Nome = @Nome, Car go = @Car go, Tel ef one =
@Tel ef one, Cel ul ar = @Cel ul ar , Ender eco = @Ender eco, Ci dade = @Ci dade,
UF = @UF, CEP = @CEP, Emai l = @Emai l , Dat aNasci ment o =
@Dat aNasci ment o, Obser vacao = @Obser vacao WHERE Cont at oI D =
@Cont at oI D" ;
da. Updat eCommand. Par amet er s. Add( " @Empr esaI D" ,
Sql DbType. I nt , 4, " Empr esaI D" ) ;
da. Updat eCommand. Par amet er s. Add( " @Nome" ,
Sql DbType. Var Char , 50, " Nome" ) ;
da. Updat eCommand. Par amet er s. Add( " @Car go" ,
Sql DbType. Var Char , 50, " Car go" ) ;
da. Updat eCommand. Par amet er s. Add( " @Tel ef one" ,
Sql DbType. Var Char , 15, " Tel ef one" ) ;
da. Updat eCommand. Par amet er s. Add( " @Cel ul ar " ,
Sql DbType. Var Char , 15, " Cel ul ar " ) ;
da. Updat eCommand. Par amet er s. Add( " @Ender eco" ,
Sql DbType. Var Char , 50, " Ender eco" ) ;
da. Updat eCommand. Par amet er s. Add( " @Ci dade" ,
Sql DbType. Var Char , 50, " Ci dade" ) ;
da. Updat eCommand. Par amet er s. Add( " @UF" , Sql DbType. Var Char ,
2, " UF" ) ;
da. Updat eCommand. Par amet er s. Add( " @CEP" , Sql DbType. Var Char ,
9, " CEP" ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 144

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

da. Updat eCommand. Par amet er s. Add( " @Emai l " ,
Sql DbType. Var Char , 50, " Emai l " ) ;
da. Updat eCommand. Par amet er s. Add( " @Dat aNasci ment o" ,
Sql DbType. Dat eTi me, 50, " Dat aNasci ment o" ) ;
da. Updat eCommand. Par amet er s. Add( " @Obser vacao" ,
Sql DbType. Text , 2, " Obser vacao" ) ;
da. Updat eCommand. Par amet er s. Add( " @Cont at oI D" ,
Sql DbType. I nt , 50, " Cont at oI D" ) ;
da. Updat eCommand. Connect i on = conn;

Seu painel de cdigo aps o insero do cdigo para o UpdateCommand:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 145

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O cdigo para o UpdateCommand bem parecido com o do InsertCommand, o
que muda mesmo o cdigo do comando SQL e o acrscimo do parmetro
@ContatoID que utilizado na clausula WHERE do comando UPDATE.

26 Vamos agora implementar o cdigo para o DeleteCommand com segue:

da. Del et eCommand = new Sql Command( ) ;
da. Del et eCommand. CommandText = " DELETE FROM Cont at o WHERE
Cont at oI D = @Cont at oI D" ;
da. Del et eCommand. Par amet er s. Add( " @Cont at oI D" ,
Sql DbType. I nt , 4, " Cont at oI D" ) ;
da. Del et eCommand. Connect i on = conn;

A prxima imagem mostra seu painel de cdigo aps a insero do cdigo para o
DeleteCommand:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 146

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O comado SQL para o DeleteCommand mais simples porque s recebe um
parmetro.

No se esquea que alem do comando SQL e dos parmetros precisamos informar
qual conexo (objeto Connection) ser utilizado para executar o comando.

Agora, aps feitas as modificaes nos dados de um objeto DataSet apenas
precisamos chamar o mtodo Update do objeto DataAdapter utilizando por
exemplo o seguinte cdigo:

da. Updat e( ds. Tabl es[ 0] ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 147

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

27 - Voc pode colocar o cdigo acima no mtodo que desejar em seus programas,
no nosso exemplo eu vou colocar dentro do mtodo button3_Click para ser
executado pelo button3 apenas para no adicionar um outro boto no exemplo
como mostra a imagem:



Note que necessrio informar qual objeto DataSet e sua respectiva tabela sero
usadas no mtodo Update para persistir as informaes no banco de dados.

27 Execute e teste sua aplicao.

Agora se voc inserir, alterar ou remover informaes do DataGridView e clicar no
button3 as mesmas sero salvas no banco de dados.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 148

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Criando um objeto DataSet utilizando o Visual Studio 2005

28 - Vamos agora criar um DataSet utilizando o Visual Studio 2005, para isso na
janela Solution Explorer clique com o boto direito sobre o nome do projeto,
selecione Add e clique em New Item.



29 Na janela Add New Item selecione DataSet em Templates e no campo
Name digite dsControleProjetos.xsd para dar nome ao DataSet, aps clique em
Add.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 149

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O objeto DataSet adicionado a aplicao como mostra imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 150

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Perceba que na imagem acima j temos adicionado a nossa aplicao o
ProjetosDataSet que foi criado no capitulo 1.

30 Na janela DataBase Explorer arraste para o dsControleProjetos a tabela
Contato.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 151

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que foi criado uma representao da tabela (objeto DataTable) chamada
Contato e um objeto chamado ContatoTableAdapter que funciona como um
objeto DataAdapter para permitir manipulao dos dados desta tabela no banco
de dados.

31 Arraste agora a tabela Empresas para o dsControleProjetos.

A prxima imagem mostra agora o nosso DataSet com as duas tabelas, note que
ele representa at mesmo o relacionamento entre as tabelas. Tambm foi criado
um TableAdapter para a nova DataTable.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 152

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Esse tipo de DataSet criado pelo Visual Studio conhecido como DataSet tipado.
Isso porque o Visual Studio cria automaticamente uma classe que identifica a
estrutura das tabelas, colunas e linhas do DataSet, o que facilita o uso do mesmo
nas aplicaes porque disponibiliza informaes em tempo de compilao e
disponibiliza a estrutura do DataSet para o IntelliSense tambm.

32 Para testar se o TableAdapter esta trazendo corretamente os dados clique
com o boto direito sobre Fill, GetData() e selecione Preview Data como mostra
a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 153

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



33 Na janela Preview Data clique em Preview para visualizar os dados.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 154

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



34 Arraste as demais tabelas para o DataSet como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 155

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Agora temos uma representao de todo nosso banco de dados em um objeto
DataSet tipado com mtodos que j nos ajudam a inserir e atualizar os dados.

35 Adicione um novo formulrio (Windows Form) a sua aplicao chamado
Projetos como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 156

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



36 Arraste para o formulrio um dataGridView como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 157

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



37 Clique na smart Tag do DataGridView e em Choose Data Source selecione
Other Data Sources, dsControleProjetos e clique em Projeto como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 158

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Isso faz uma referencia ao DataTable Projeto do DataSet dsControleProjetos.
Automaticamente so adicionados os objetos dsControleProjetos (DataSet),
projetoBindingSource e projetoTableAdapter para manipulao dos dados no
formulrio como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 159

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Foi adicionado tambm automaticamente o mtodo Projetos_Load o cdigo que
preenche o DataSet dsControleProjetos como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 160

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Para que o DataGridView preencha todo o formulrio eu atribui manualmente na
janela Properties o valor Fill na propriedade Dock do mesmo.


Antes de executar sua aplicao note que foi criado mais uma string de conexo
no nosso arquivo app.config como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 161

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



38 Altere o atributo AttachDbFilename da string de conexo chamada
ProjetosConnectionString1 com o mesmo valor da string de conexo chamada
ProjetosConnectionString como mostra a imagem:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 162

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Normalmente suas aplicaes s tero uma string de conexo no arquivo
app.config para cada banco de dados que voc ira utilizar. Concordo que as duas
so as mesmas, mas vamos deixar assim para no peder o foco do exemplo.

39 Vamos agora deixar o formulrio de projeto sendo o primeiro a ser executado
em nosso programa, para isso entre em Program.cs na janela Solution Explorer
e mude de Form1 para Projetos o parmetro do mtodo Application.Run como
mostra a imagem:



40 Execute sua aplicao e teste.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 163

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que o formulrio Projetos aberto ao invs de Form1 e que todas as
modificao que so feitas no so persistidas no banco de dados. Isso acontece
porque no estamos executando o mtodo Update do objeto TableAdapter. Para
isso:

41 Adicione um controle ToolStrip e no mesmo adicione um Button como
mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 164

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



42 De um clique duplo sobre o boto adicionado na ToolStrip e digite o seguinte
cdigo dentro do procedimento de evento Click do mesmo:

pr oj et oTabl eAdapt er . Updat e( dsCont r ol ePr oj et os. Pr oj et o) ;

Seu painel de cdigo deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 165

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



43 Teste novamente sua aplicao. Agora para salvar os dados apenas clique
sobre o boto como mostra a imagem:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 166

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Voc pode personalizar a imagem do boto em suas aplicaes, no meu exemplo eu
tambm defini a propriedade Anchor do DataGridView1 para Top, Bottom, Left,
Right e a propriedade Dock do mesmo controle para none para que ele preencha
a tela quando eu clicar em maximizar.

Como voc viu com duas linhas de cdigo (sendo que uma nem foi ns que
digitamos) alcanamos o mesmo objetivo do exemplo anteriors no formulrio
CadastroContato.

O objeto TableAdapter

Como voc j percebeu o objeto TableAdapter muito semelhante ao
DataAdapter. Isso porque o TableAdapter uma classe criada pelo Visual Studio
2005 utilizando internamente a classe DataAdapter. Vamos agora aprender como
criar Querys (Consultas) personalizadas facilmente utilizando o Visual Studio 2005.

44 Abra o dsControleProjetos como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 167

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Primeiro vamos criar uma consulta que retorna apenas o cdigo da empresa e o
CNPJ para ser utilizado em controles como listBox e comboBox.

45 Clique com o boto direito sobre Fill, GetData() em
EmpresasTableAdapter e selecione Add Query como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 168

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Em TableAdapter Query Configuration Wizard voc pode criar uma consulta
baseada em um comando SQL (a primeira opo), o prprio assistente pode criar
uma store procedure no banco de dados para voc (segunda opo) ou voc pode
utilizar uma stored procedure j existente no banco de dados como mostra a
prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 169

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



46 Selecione a primeira opo (Use SQL Statements) e clique em Next.

Agora voc precisa escolher que tipo de comando SQL voc deseja usar:

SELECT which return rows retorna um conjunto de registros.
SELECT which return a single value retorna apena um registro, geralmente
usado com funes que retonam total de registros, soma e etc.
UPDATE atualizao de dados
DELETE excluso de dados
INSERT insero de dados

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 170

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



47 Escolha SELECT which return rows e clique em Next.

O comando SQL para selecionar todos os registros da tabela j exibido. Voc
pode personaliz-lo se necessrio diretamente ou atravs do Query Builder.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 171

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



48 Clique no boto Query Builder.

A prxima imagem mostra o Query Builder que pode auxili-lo na criao do
comando SQL se voc no tiver muita experincia.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 172

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



49 Deixe selecionado apenas os campos EmpresaID, CNPJ e TipoID como
mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 173

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que o comando SQL j alterado para recuperar apenas os valores
selecionados.

50 Clique em Execute Query para executar o comando SQL com a finalidade de
test-lo.

Os dados so exibidos como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 174

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



51 Clique em OK.

O comando j atualizado como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 175

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



52 Clique em Next.

Agora voc precisa especificar o nome dos mtodos que sero utilizados para
recuperar dados.

Fill a DataTable semelhante ao mtodo Fill do objeto DataAdapter voc
precisa informar por parmetro qual o DataTable ele vai preencher.
Return a DataTable Retorna uma DataTable com os dados, voc deve
atribuir este mtodo a um objeto DataTable.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 176

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



53 Desmarque a opo Fill a DataTable, no vamos utilizar ela nesta Query e
mude o nome do mtodo Return a DataTable para GetDataForLists como
mostrou a imagem anterior.

54 Clique em Finish. (Se voc clicar em Next antes de Finish ser exibido um
resumo das opes escolhidas e o que ser executado pelo assistente).

55 A proxima imagem mostra uma mensagem que informa que o schema do
DataTable diferente do da nossa consulta. Clique em OK.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 177

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Voc pode alterar a consulta novamente utilizando o mesmo assistente para isso
clique com o boto direito sobre o a mesma e selecione Configure como mostra a
prxima imagem:



56 Vamos agora adicionar uma consulta que retorna o cdigo e nome dos
projetos, semelhante ao que fizemos anteriormente com Empresas. Para isso
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 178

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

novamente clique com o boto direito sobre Fill, GetData() s que desta vez em
ProjetoTableAdapter e selecione Add Query como mostra a imagem:



57 Clique em Next para utilizar um comando SQL.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 179

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



58 Clique em Next para utilizar um comando SELECT que retorna um conjunto de
registros.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 180

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



59 O comando SQL deve ser como o que mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 181

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note na imagem acima que adicionei a clausula ORDER BY para ordenar por Nome
os projetos, ou seja, o resultado vai ser exibido em ordem alfabtica por Nome.

60 Novamente desmarque a opo Fill a DataTable e modifique o nome de
Return a DataTable para GetDataForLists como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 182

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



61 Clique em Finish para concluir a criao da Query.

62 Vamos agora fazer um exemplo que recupera dados de um registro da tabela
Tarefa informando o cdigo do mesmo. Para isso clique com o boto direito sobre
Fill, GetData() no DataTable Tarefa e selecione Add Query como mostra a
prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 183

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



63 Novamente vamos utilizar um comando SQL. Clique em Next.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 184

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



64 Novamente vamos utilizar um comando SELECT que retorna um conjunto de
registros. Clique em Next.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 185

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



65 O comando SQL deve ser igual o da prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 186

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que a clausula WHERE recebe o parmetro @TarefaID, semelhante ao que
usamos com o DataAdapter.

66 Clique em Next.

67 Novamente vamos criar apenas o mtodo que retorna um DataTable que
agora ter o nome GetDataTarefaID como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 187

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



68 Clique em Next para visualizar o resumo do que ser feito atravs do Wizard
(Assistente):

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 188

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



69 Clique em Finish.

Para visualizar os dados voc pode clicar com o boto direito no mtodo que
acabamos de criar e selecionar Preview Data como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 189

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que agora ser necessrio informar um valor para o parmetro TarefaID
antes de clicar em Preview como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 190

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



70 Vamos agora fazer um exemplo de criao de um comando que atualiza
registros (Update). Para isso clique com o boto direito sobre algum mtodo de
TarefaTableAdapter e selecione Add Query como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 191

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



71 Clique em Next para usar um comando SQL.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 192

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



72 Selecione UPDATE como tipo de comando e clique em Next como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 193

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que o assistente j sugere o comando Update como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 194

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



73 Vamos alterar agora o comando Update sugerido pelo assistente para como
mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 195

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Na imagem acima fica claro o uso de cada parmetro.

74 Clique em Next.

75 A prxima imagem mostra a tela que permite que voc altere o nome do
comando que esta sendo criado. Apenas clique em Next.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 196

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



76 Agora temos um resumo das atividades que sero executadas pelo assistente.
Clique em Finish.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 197

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O mtodo UpdateQuery foi criado com sucesso.

77 Vamos agora adicionar um comando para excluso de registros s que desta
vez vamos utilizar Stored Procedure para voc se familiarizar com o uso das
mesmas. Clique com o boto direito sobre algum mtodo de TarefaTableAdapter
e selecione Add Query como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 198

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



78 Desta vez selecione a segunda opo que orienta o assistente a criar para ns
a stored procedure no banco de dados automaticamente e clique em Next.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 199

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Stored Procedures so procedimentos criados no banco de dados que permitem
manipulao dos dados atravs dos mesmos. Eles permitem a validao dos dados
antes que os mesmos sejam inseridos no banco. Por estarem junto com o banco de
dados as stored procedures aumentam a performance de qualquer operao no
banco de dados o que as tornam muito importante principalmente em projetos
desenvolvidos para a internet onde o volume de acesso bem grande.

Muitas vezes as stored procedures so deixadas de lado pelos desenvolvedores pela
complexidade em desenvolv-las. Esse assistente resolve este problema.

79 Selecione DELETE para o tipo de comando a ser criado como mostra a imagem
e clique em Next:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 200

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Como voc pode ver na prxima imagem, o assistente tambm j insere cdigo
para o comando DELETE:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 201

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



80 Vamos alterar o cdigo para como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 202

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



81 Clique em Next.

82 A prxima tela permite que voc de o nome para a stored procedure.
Ateno, este no o nome do comando. A stored procedure ser criada no banco
de dados. Voc pode tambm visualizar o comando SQL que ser criado e
executado no banco de dados para a criao da stored procedure, para isso clique
no boto Preview SQL Script.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 203

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A prxima imagem mostra o comando SQL que ser executado no banco de dados
para a criao da stored procedure.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 204

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



83 Clique em Close para fechar a janela Preview SQL Script.

84 De o nome de DeleteTarefa para a stored procedure como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 205

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



85 Clique em Next.

86 Agora sim, voc pode alterar o nome do comando que esta sendo criado.
Clique em Next.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 206

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



87 Clique em next para visualizar o resumo das tarefas que sero executadas
pelo assistente.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 207

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



88 Clique em Finish para concluir. O comando foi criar como mostra a imagem a
seguir. Note tambm que o cone de um comando que utiliza uma stored
procedure diferente dos demais.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 208

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Voc pode visualizar a stored procedure no banco de dados utilizando a janela
Database Explorer como mostra a imagem:


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 209

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


89 Vamos agora criar uma Query para executar um comando de insero
(INSERT). Para isso novamente clique com o boto direito sobre algum mtodo de
TarefaTableAdapter e selecione Add Query como mostra a imagem:



90 Neste exemplo vamos criar e utilizar uma stored procedure tambm, por isso
selecione a opo Create new stored procedure como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 210

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



91 Clique em Next.

92 Selecione INSERT e clique em Next.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 211

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



exibida a seguinte imagem com sugesto de cdigo para o comando INSERT:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 212

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



93 Altere o comando como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 213

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



94 Clique em Next.

95 De o nome de InsertTarefa para a Stored Procedure e clique em Next
como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 214

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



96 Mude o nome da Query para InsertQuery como mostra a imagem e clique
em Next:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 215

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



97 A prxima imagem exibe o resumo das tarefas a serem executadas. Clique em
Finish.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 216

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



A Query foi criada como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 217

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Voc pode visualizar a stored procedure no banco de dados utilizando a janela
Database Explorer como mostra a imagem:


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 218

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Falta criarmos apenas duas Querys. Uma que retorna o total de tarefas de um
determinado projeto e outra que retorna todas as tarefas tambm de um
determinado projeto. Vamos a elas.

98 Clique novamente sobre alguma mtodo de TarefaTableAdapter e selecione
Add Query como mostra a imagem:



99 Clique em Next para usar um comando SQL.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 219

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



100 Selecione a segunda opo (SELECT which return a single value) porque
vamos retornar apenas um valor com o total de registros.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 220

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



101 Clique em Next.

102 Adicione a clausula WHERE ao comando SQL como mostra a imagem abaixo.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 221

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Esta clausula permite retornar o total de registros de um determinado projeto
sendo que o cdigo do mesmo deve ser informado por parmetro.

103 Clique em Next.

104 De o nome de TotalDeTarefasPorProjeto como mostra a prxima imagem
e clique em Finish.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 222

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



105 Clique novamente sobre algum mtodo de TarefaTableAdapter e selecione
Add Query como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 223

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



106 Clique em Next para usar um comando SQL.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 224

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



107 Clique novamente em Next para utilizar um SELECT que retorna um conjunto
de registros.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 225

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



108 Adicione a clausula WHERE como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 226

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Isso permite retornar todos os registros relacionados com um determinado projeto,
ou seja, todas as tarefas de um projeto.

109 Nomeie os mtodos como mostra a prxima imagem e clique em Finish.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 227

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



No vamos criar todos estes metodos para as demais TableAdapters, elas j
possuem mtodos para atualizao criados por padro como voc j sabe mas
criamos estes mtodos e vamos utiliza-los para que voc possa entender melhor
como utilizar os TableAdapters em seus programas.

Para finalizar este capitulo note na janela Data Sources que temos dois DataSets
em nosso projeto. A janela tambm exibe cada DataTable. O DataSet
ProjetosDataSet foi criado no primeiro capitulo automaticamente quando
estvamos criando o fomulrio CadatroEmpresa.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 228

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Voc pode arrastar uma DataTable para o formulrio e sero criados os
componentes e objetos necessrios para manipulao dos dados automaticamente
como fizemos no primeiro capitulo. Voc tem duas opes para a forma que sero
manipulados os dados no formulrio, atravs de um DataGridView ou no modo
Details. No primeiro capitulo usamos o modo Details.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 229

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Voc tambm pode personalizar qual controle ser utilizando individualmente para
cada campo de uma DataTable como mostra a imagem.



Aps as customizaes voc arrasta para o formulrio a DataTable desejada. Esta
a forma mais rpida e fceil de criar formulrios usando DataSets tipados.

Utilizando os mtodos do objeto TableAdapter

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 230

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Como voc j percebeu o objeto TableAdapter muito semelhante ao
DataAdapter. Isso porque o TableAdapter uma classe criada pelo Visual Studio
2005 utilizando internamente a classe DataAdapter. Vamos agora aprender como
criar Querys (Consultas) personalizadas facilmente utilizando o Visual Studio 2005.

110 Adicione um novo formulrio aplicao chamado Tarefas como mostra a
imagem:



111 Adicione os seguintes controles no formulrio Tarefas:

1 ListBox
2 DateTimePicker
1 TextBox
2 Button

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 231

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

112 Mude a propriedade Name do controle dateTimePicker1 para dataInicio e
do dateTimePicker2 para dataFim.

113 Mude a propriedade Name do controle textBox1 para descricao, a
propriedade Multiline para true e a propriedade ScrollBars para Horizontal.

114 Mude a propriedade Text do button1 para Adicionar e a mesma
propriedade do button2 para Salvar.

115 Organize os controles como mostra a prxima imagem alterando a
propriedade Text dos Labels adequadamente:


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 232

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Os objetos TableAdapters do nosso DataSet esto dentro do namespace:

Cont r ol ePr oj et os. dsCont r ol ePr oj et osTabl eAdapt er s

Onde ControleProjetos o namespace principal da nossa aplicao e
dsControleProjetosTableAdapters o namespace que faz referencia ao
DataSet. Voc pode importar este namespace usando o comando using no topo
do painel de cdigo ou usa-lo explicidamente como faremos a seguir.

A prxima imagem mostra as classes que representam cada TableAdapter criado
dentro do namespace dsControleProjetosTableAdapters. Perceba que no
precisamos referenciar ControleProjetos porque estamos dentro do mesmo.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 233

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


116 - Vamos agora criar um objeto TarefaTableAdapter que possui os mtodos
para manipular os dados da tabela Tarefa, para isso adicione o seguinte cdigo
dentro da classe Tarefas no formulrio que estamos criando:

dsCont r ol ePr oj et osTabl eAdapt er s. Tar ef aTabl eAdapt er da = new
dsCont r ol ePr oj et osTabl eAdapt er s. Tar ef aTabl eAdapt er ( ) ;

No cdigo acima estamos instanciando um objeto do tipo TarefaTableAdapter em
um objeto chamado da.

117 Adicione tambm o seguinte cdigo que cria uma varivel que ser usada
para armazenar o ProjetoID. O modificador public permite acessar a varivel de
outra classe ou formulrio.

publ i c i nt Pr oj et oI D;

Seu painel de cdigo deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 234

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



118 De um clique duplo sobre o button2 para criar o mtodo button2_Click.

A prxima imagem mostra o IntelliSense exibindo as propriedade e mtodos de
TarefaTableAdapter (objeto da). Voc pode visualizar todos os mtodos que
criamos nos exemplos anteriores e tambm os que j so criados
automaticamente. Note tambm na imagem os mtodos Insert e InsertQuery.
Perceba que a lista de parmetros que eles recebem so muito parecidas. O
mtodo Insert foi criado automaticamente quando arrastamos a tabela para o
DataSet e o mtodo InsertQuery criamos anteriormente. O que eu quero que
voc compreenda aqui que voc poderia usar o mtodo Insert tranquilamente,
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 235

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

apenas criamos um mtodo personalizado para ensin-lo como faz-lo. Muitas
vezes os mtodos criados automaticamente no satisfazem nossas necessidades.



A prxima imagem mostra que o mtodo InsertQuery recebe os seguintes
parmetros:
ProjetoID
Descricao
Inicio
Fim

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 236

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



119 Adicione o seguinte cdigo dentro mtodo button2_Click:

da. I nser t Quer y( Pr oj et oI D, t hi s. descr i cao. Text , t hi s. dat aI ni ci o. Val ue,
t hi s. dat aFi m. Val ue) ;

MessageBox. Show( " Tar ef a i nser i da comsucesso! ! ! " ) ;

O cdigo acima apenas executa o mtodo InsertQuery que criamos
passando por parametro os valores dos controles. Em seguida o mtodo Show do
objeto MessageBox mostra uma mensagem informando que a tarefa foi inserida
com sucesso.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 237

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


A prxima imagem representa o painel de cdigo com as instrues que acabamos
de digitar:



Isso o suficiente para inserir registros, o TableAdapter se responsabiliza do
restante.

Antes de testarmos vamos fazer algumas alteraes no formulrio Projetos.cs
para que o mesmo abra o formulrio Tarefas.cs informando o cdigo do projeto
selecionado.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 238

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


120 Abra o fomulrio Projetos.cs. Selecione o dataGridView1 e na janela
Properties localize o evento RowHeaderMouseDoubleClick como mostra a
prxima imagem:



Note que para visualizar os eventos necessrio clicar no boto com um smbolo
de um raio.

121 De um clique duplo sobre o evento RowHeaderMouseDoubleClick e digite
o seguinte cdigo dentro do procedimento de evento criado:

Tar ef as f r m= new Tar ef as( ) ;
f r m. Pr oj et oI D =
( i nt ) t hi s. dat aGr i dVi ew1. Rows[ e. RowI ndex] . Cel l s[ 0] . Val ue;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 239

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

f r m. ShowDi al og( ) ;

Seu painel de cdigo deve estar assim:



O evento RowHeaderMouseDoubleClick executado quando damos um clique
duplo no cabealho da linha (no lado direito). O cdigo que acabamos de digitar
usado para abrir o formulrio Tarefas informando para o mesmo o valor do
ProjetoID da linha onde foi efetuado o duplo clique.

122 Execute sua aplicao e de um clique duplo no cabealho da linha de algum
dos projetos como mostra imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 240

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O formulrio Tarefas aberto com a varivel ProjetoID com o valor do ProjetoID
da linha onde voc efetuou o duplo clique.



123 Escolha uma data para inicio e outra para fim. Digite uma descrio para a
tarefa e clique em Salvar.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 241

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



124 A prxima imagem mostra que a tarefa foi inserida com sucesso. Clique em
Ok e pare a execuo do programa.



125 - Vamos adicionar agora o cdigo que lista as tarefas de acordo com o projeto
selecionado. Para isso adicione o seguinte cdigo dentro do evento Tarefas_Load:

l i st Box1. Dat aSour ce = da. Get Dat aByPr oj et oI D( Pr oj et oI D) ;
l i st Box1. Di spl ayMember = " I ni ci o" ;
l i st Box1. Val ueMember = " Tar ef aI D" ;

Seu painel de cdigo deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 242

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



No cdigo acima passamos para a propriedade DataSource uma DataTable que
recuperada atravs do mtodo GetDataByProjetoID que criamos em
TarefaTableAdapter. Note que informamos o cdigo do projeto atravs da
varivel publica para que sejam retornados apenas as tarefas do projeto
selecionado pelo duplo clique no dataGridView1 do formulrio Projetos.cs.

126 Execute sua aplicao. Agora os projetos so exibidos no listBox1 como
mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 243

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



127 Pare a execuo do programa e importe o namespace System.Data usando
o seguinte cdigo:

usi ng Syst em. Dat a;

A prxima imagem mostra seu painel de cdigo com a importao:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 244

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O namespace System.Data ser usado para a criao de uma DataTable que
armazenar os valores de uma tarefa selecionada atravs do listBox1.

128 Adicione o seguinte mtodo dentro da classe Tarefas:

pr i vat e voi d Car r egar Tar ef a( i nt t ar ef aI D)
{
Dat aTabl e dt ;
dt = da. Get Dat aTar ef aI D( t ar ef aI D) ;
t hi s. dat aI ni ci o. Val ue = ( Dat eTi me) dt . Rows[ 0] [ " I ni ci o" ] ;
t hi s. dat aFi m. Val ue = ( Dat eTi me) dt . Rows[ 0] [ " Fi m" ] ;
t hi s. descr i cao. Text = dt . Rows[ 0] [ " Descr i cao" ] . ToSt r i ng( ) ;
}
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 245

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


O mtodo acima recebe tarefaID por parmetro e usa o mesmo para recuperar os
dados da tarefa atravs do mtodo GetDataTarefaID que retorna uma DataTable
com os valores da tarefa selecionada. Precisamos criar um DataTable para
armazenar o retorno do mtodo GetDataTarefaID. Para recuperar um valor de uma
DataTable precisamos informar a linha e o nome do campo (coluna). Nossa linha
tem o valor zero porque o metodo GetDataTarefaID retorna apenas um registro
(porque nunca teremos uma tarefa com o mesmo cdigo na tabela) usamos o
ndice 0 (zero) porque a primeira linha sempre tem ndice 0 (zero) como em um
array.

129 O seguinte cdigo deve ser adicionado dentro de Tarefas_Load como
mostra a prxima imagem, ele apenas verifica se existe algum item no listBox1
(Count > 0) e se sim chama o mtodo CarregarTarefa passando o cdigo da
primeira tarefa do listBox1. Com esse cdigo sempre que tivermos uma tarefa ela
j ser aberta quando iniciarmos o formulrio Tarefas.

i f ( l i st Box1. I t ems. Count > 0)
{
Car r egar Tar ef a( ( i nt ) l i st Box1. Sel ect edVal ue) ;
}

A prxima imagem mostra os cdigos que acabamos de adicionar no Visual Studio:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 246

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



130 De um clique duplo sobre o listBox1 e dentro do procedimento de evento
criado adicione o seguinte cdigo como mostra a prxima imagem:

i f ( l i st Box1. Sel ect edVal ue. ToSt r i ng( ) ! = " Syst em. Dat a. Dat aRowVi ew" )
{
Car r egar Tar ef a( ( i nt ) l i st Box1. Sel ect edVal ue) ;
}

Este cdigo tambm utiliza o mtodo CarregarTarefa. O if (estrutura de deciso)
apenas verifica se o evento no esta sendo disparado na hora em que o formulrio
esta sendo criado, ou seja, quando o listBox1 esta sendo carregado pela primeira
vez. Sem esse if teramos um erro ao abrir o formulrio.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 247

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



131 Execute sua aplicao. Note que a primeira tarefa j aparece carregada e que
ao clicar sobre qualquer tarefa no listBox1 a mesma carregada nos controles do
formulrio.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 248

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



132 Pare a execuo da aplicao.

133 De um clique duplo sobre o button1 e adicione o seguinte cdigo que
verifica se a propriedade Text do button1 Adicionar, se sim executado o
cdigo que prepara o formulrio para a insero de uma nova tarefa zerando os
controles e bloqueando a navegao, se no habilitada novamente navegao e
a propriedade Text dos botes voltam ao que estava.

i f ( but t on1. Text == " Adi ci onar " )
{
but t on1. Text = " Cancel ar " ;
but t on2. Text = " I nser i r " ;
l i st Box1. Enabl ed = f al se;
dat aI ni ci o. Val ue = Dat eTi me. Today;
dat aFi m. Val ue = Dat eTi me. Today;
descr i cao. Text = " " ;
}
el se
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 249

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

{
but t on1. Text = " Adi ci onar " ;
but t on2. Text = " Sal var " ;
l i st Box1. Enabl ed = t r ue;
i f ( l i st Box1. I t ems. Count > 0)
{
Car r egar Tar ef a( ( i nt ) l i st Box1. Sel ect edVal ue) ;
}
}

A prxima imagem mostra o cdigo que acabamos de adicionar:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 250

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

134 Para entender melhor execute a aplicao e clique em Adicionar. Perceba
que a propriedade Text muda para Cancelar, o listBox1 fica desabilitado, os
controles de data so definidos para a data atual, a descrio apagada e a
propriedade Text do boto Salvar muda para Inserir. Se voc clicar em Cancelar
tudo volta como estava antes de clicar em Adicionar.



135 Vamos alterar o cdigo do evento button2_Click para que o mesmo alm
de adicionar tambm altere o a tarefa que esta sendo exibida. Para isso verificamos
se a propriedade Text do button2 igual a Inserir, se sim vamos executar cdigo
para inserir uma nova tarefa, se no vamos executar cdigo para alterar a tarefa
selecionada. Segue o novo cdigo que deve ser inserido no evento button2_Click:

i f ( but t on2. Text == " I nser i r " )
{
da. I nser t Quer y( Pr oj et oI D, t hi s. descr i cao. Text ,
t hi s. dat aI ni ci o. Val ue, t hi s. dat aFi m. Val ue) ;
but t on1. Text = " Adi ci onar " ;
but t on2. Text = " Sal var " ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 251

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

l i st Box1. Enabl ed = t r ue;
l i st Box1. Dat aSour ce =
da. Get Dat aByPr oj et oI D( Pr oj et oI D) ;
l i st Box1. Ref r esh( ) ;
MessageBox. Show( " Tar ef a i nser i da comsucesso! ! ! " ) ;
}
el se
{
da. Updat eQuer y( Pr oj et oI D, t hi s. descr i cao. Text ,
t hi s. dat aI ni ci o. Val ue, t hi s. dat aFi m. Val ue,
( i nt ) l i st Box1. Sel ect edVal ue) ;
MessageBox. Show( " Tar ef a sal va comsucesso! ! ! " ) ;
}

O cdigo acima utiliza os mtodos UpdateQuery e InsertQuery para atualizar e
inserir uma tarefa respectivamente. Aps a insero de uma tarefa precisamos
carregar novamente o listBox1 para que a nova tarefa seja listada, por isso
precisamos trazer novamente os dados do banco utilizando o mtodo
GetDataByProjetoID do objeto TarefaTableAdapter e usar o mtodo Refresh
do listBox1 como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 252

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



136 - Agora voc j capaz de inserir e atualizar tarefas. Falta apenas
possibilidade de excluir uma tarefa indesejada. Para isso adicione um novo boto ao
formulrio como mostra a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 253

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



137 De um clique duplo sobre o boto Excluir e adicione o seguinte cdigo:

i f ( l i st Box1. I t ems. Count > 0)
{
da. Del et eQuer y( ( i nt ) l i st Box1. Sel ect edVal ue) ;
l i st Box1. Dat aSour ce =
da. Get Dat aByPr oj et oI D( Pr oj et oI D) ;
l i st Box1. Ref r esh( ) ;
MessageBox. Show( " Tar ef a excl ui da comsucesso! ! ! " ) ;
}
el se
{
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 254

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

MessageBox. Show( " No possi vel excl ui r ! ! ! " ) ;
}

O cdigo acima utiliza o mtodo DeleteQuery para excluir uma tarefa. Mas antes
verifica se possui alguma tarefa para que possa ser excluda seno exibe a
mensagem a seguir:



A prxima imagem mostra a mensagem que exibida quando a tarefa for excluda
com sucesso.



Agora voc j capaz de utilizar todos os mtodos de um TableAdapter e
percebeu o quanto esse objeto pode ser til e produtivo em suas aplicaes.






Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 255

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Capitulo 4
O objeto Command e o modelo conectado

Durante todo o capitulo anterior estudamos o objeto DataSet que permite
manipulao de dados de forma desconectada do banco de dados (modelo
desconectado). Neste modelo os dados ficam armazenados na memria do
computador e s so persistidos no banco de dados quando desejado. Como
percebeu o Visual Studio tem ferramentas que torna muito produtivo o
desenvolvimento desta forma.

O modelo desconectado tem se demonstrado uma ferramenta muito til para o
desenvolvimento de aplicaes para o Windows e Pocket PC. No entanto como o
DataSet fica armazenado na memria do computador esse modelo no tem se
demonstrado muito til em aplicaes para a Internet. muito mais rpido
desenvolver utilizando modelo desconectado atravs dos objetos DataSet e
TableAdapter, mas esses objetos usam muito mais recursos do que o simples
objeto Command e DataReader que so usados no modelo conectado.

Os recursos do DataSet que permitem manipulao de forma desconectada (alm
da produtividade imposta pelo Visual Studio) no so muito teis no ambiente da
Internet porque todo o processamento efetuado no servidor. Ento se voc cria
um DataSet atravs de uma aplicao ASP.NET ele fica armazenado na memria
do servidor e no na do cliente como ocorre numa aplicao Windows. Agora
imagine que voc tenha 1.000 usuarios no servidor com cada um deles com um
objeto DataSet na memria? E 10.000? Ai vale o bom senso e muitas vezes o
objeto DataSet passa a no ser interessante (veja bem, eu falei muitas vezes e
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 256

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

no todas). Lembre-se de que o ciclo de vida de uma pagina ASP.NET diferente
de um formulrio Windows, quando o servidor termina o processamento de uma
aplicao ASP.NET e retorna o HTML para o cliente (navegador) todos os recursos
(variveis e objetos) so liberados no servidor. Para persistir estado no servidor
web necessrio voc pode utilizar variveis de sesso (session), por exemplo.

Para situaes onde a performance muito importante (isso inclui at mesmo
algumas aplicaes Windows porque no) voc pode utilizar o modelo conectado
como estudaremos neste capitulo.

No modelo conectado a conexo com o banco de dados permanece aberta
enquanto manipulamos os dados. Ns j fizemos um exemplo usando esse modelo
no capitulo dois.

O objeto mais importante no modelo conectado o Command. Atravs do objeto
Connection ele executa comandos SQL que permitem recuperar, inserir, atualizar
e excluir dados do banco de dados.

Como falamos no capitulo dois, para executar o objeto Command voc tem trs
mtodos principais:

ExecuteScalar utilizado quando queremos retornar apenas um valor,
como o que fizemos no exemplo do capitulo dois. Se o resultado da consulta
SQL retornar mais do que um valor o mtodo ExecuteScalar vai retornar o
resultado da primeira linha com a primeira coluna ou seja, o primeiro campo
que encontrar.
ExecuteReader utilizado para retornar um conjunto de registros atravs
do comando SQL Select por exemplo, ele frequentemente utilizado
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 257

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

associado a outro objeto, conhecido como DataReader que vai ajudar na
leitura destes registros.
ExecuteNonQuery utilizado quando voc no espera retorno algum,
como um comando INSERT, UPDATE ou DELETE.

No capitulo dois ns fizemos um exemplo utilizando o mtodo ExecuteScalar.

Vamos agora aprender na pratica como utilizar o modelo conectado focando nos
mtodos ExecuteReader e ExecuteNonQuery.

1 No projeto ControleProjetos abra o formulrio CadastroContato.cs. A
prxima imagem mostra os controles que esto neste formulrio que foram usados
quando aprendemos a utilizar o objeto DataSet e o DataAdapter.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 258

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



2 - Neste capitulo vamos implentar o cadastro de contatos utilizando o modelo
conectado por isso apague todos os controle do formulrio MENOS o controle
label1 como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 259

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O label1 utiliza o cdigo seguinte que criamos no capitulo dois para recuperar o
total de contatos cadastrados. Esse cdigo utiliza o modelo conectado atravs do
mtodo ExecuteScalar do objeto Command. Se voc tiver duvidas sobre ele
consulte o capitulo dois por que agora vamos nos concentrar no aprendizado dos
dois outros mtodos, o ExecuteNonQuery e o ExecuteReader.

St r i ng st r Conn;
st r Conn =
Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osConnect i onSt r i ng
" ] . ToSt r i ng( ) ;
Sql Connect i on conn;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 260

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

conn = new Sql Connect i on( ) ;
conn. Connect i onSt r i ng = st r Conn;

Sql Command cmd;
cmd = new Sql Command( ) ;
cmd. CommandText = " SELECT COUNT( *) FROM Cont at o" ;
cmd. Connect i on = conn;

conn. Open( ) ;

l abel 1. Text = cmd. Execut eScal ar ( ) . ToSt r i ng( ) ;

conn. Cl ose( ) ;

3 No painel de cdigo do formulrio CadastroContato apague todos os mtodos
MENOS o mtodo CadastroContato_Load e o CadatroContato como mostra a
imagem a seguir. Dentro do mtodo CadastroContato_Load devemos ter apenas
o cdigo mostrado acima que exibe no label1 o total de contatos cadastrados.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 261

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Lembre-se de deixar tambm o cdigo que importa o namespace com as classes
para uso do banco de dados SQL Server:

usi ng Syst em. Dat a. Sql Cl i ent ;

4 Arraste para o formulrio os controles conforme a prxima imagem que
tambm mostra como organiza-los e quais devem ser os valores das propriedades
Text dos labels e botes:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 262

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Para facilitar o entendimento eu nomeei os controles de forma que representem o
que vo executar ou armazenar como mostro nos prximos passos.

5 Mude a propriedade Name do boto Adicionar para btnAdicionar.

6 Mude a propriedade Name do boto Excluir para btnExcluir.

7 Mude a propriedade Name do boto Inserir para btnInserir.

8 Mude a propriedade Name do comboBox Empresa para cmbEmpresa.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 263

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


9 Mude as propriedade Name dos controles TextBox para txtNome, txtCargo,
txtTelefone, txtCelular, txtEndereco, txtCidade, txtUF, txtCEP, txtEmail,
txtNascimento, txtObservacao respectivamente de acordo com o que eles vo
armazenar.

Para simplificar e no estender muito o capitulo ns vamos utilizar os objetos
ContatoTableAdapter e EmpresasTableAdapter para carregar o listBox1 e o
cmbEmpresa.

10 Adicione o seguinte mtodo chamado CarregarContatos que ser utilizado
para carregar o listBox1.


pr i vat e voi d Car r egar Cont at os( )
{
dsCont r ol ePr oj et osTabl eAdapt er s. Cont at oTabl eAdapt er da
= new dsCont r ol ePr oj et osTabl eAdapt er s. Cont at oTabl eAdapt er ( ) ;
l i st Box1. Dat aSour ce = da. Get Dat a( ) ;
l i st Box1. Di spl ayMember = " Nome" ;
l i st Box1. Val ueMember = " Cont at oI D" ;
l i st Box1. Ref r esh( ) ;
}

A prxima imagem mostra seu painel cdigo com o mtodo que acabamos de
adicionar:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 264

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



11 Adicione o seguinte mtodo chamado CarregarEmpresas que ser utilizado
para carregar o cmbEmpresa.

pr i vat e voi d Car r egar Empr esas( )
{
cmbEmpr esa. I t ems. Cl ear ( ) ;
dsCont r ol ePr oj et osTabl eAdapt er s. Empr esasTabl eAdapt er da =
new dsCont r ol ePr oj et osTabl eAdapt er s. Empr esasTabl eAdapt er ( ) ;
cmbEmpr esa. Dat aSour ce = da. Get Dat aFor Li st s( ) ;
cmbEmpr esa. Di spl ayMember = " CNPJ " ;
cmbEmpr esa. Val ueMember = " Empr esaI D" ;
}

A prxima imagem mostra seu painel cdigo com o mtodo CarregarEmpresas:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 265

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



12 Agora vamos adicionar o mtodo CarregaContato que recebe contatoID por
parmetro. Esse mtodo vai utilizar o modelo conectado atravs dos objetos
Connection, Command e DataReader para recuperar um contato do banco de
dados e apresentar seus dados, segue o cdigo do mesmo:

pr i vat e voi d Car r egaCont at o( i nt cont at oI D)
{
Sql Connect i on conn = new
Sql Connect i on( Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osCo
nnect i onSt r i ng" ] . ToSt r i ng( ) ) ;
Sql Command cmd = new Sql Command( " SELECT * FROM Cont at o
WHERE Cont at oI D = " + cont at oI D, conn) ;
Sql Dat aReader dr ;

conn. Open( ) ;
dr = cmd. Execut eReader ( ) ;

i f ( dr . HasRows)
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 266

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

{
dr . Read( ) ;
t xt Nome. Text = dr [ " Nome" ] . ToSt r i ng( ) ;
cmbEmpr esa. Sel ect edVal ue = dr [ " Empr esaI D" ] . ToSt r i ng( ) ;
t xt Car go. Text = dr [ " Car go" ] . ToSt r i ng( ) ;
t xt Tel ef one. Text = dr [ " Tel ef one" ] . ToSt r i ng( ) ;
t xt Cel ul ar . Text = dr [ " Cel ul ar " ] . ToSt r i ng( ) ;
t xt Ender eco. Text = dr [ " Ender eco" ] . ToSt r i ng( ) ;
t xt Ci dade. Text = dr [ " Ci dade" ] . ToSt r i ng( ) ;
t xt UF. Text = dr [ " UF" ] . ToSt r i ng( ) ;
t xt CEP. Text = dr [ " CEP" ] . ToSt r i ng( ) ;
t xt Emai l . Text = dr [ " Emai l " ] . ToSt r i ng( ) ;
t xt Nasci ment o. Text =
Dat eTi me. Par se( dr [ " Dat aNasci ment o" ] . ToSt r i ng( ) ) . ToShor t Dat eSt r i ng( ) ;
t xt Obser vacao. Text = dr [ " Obser vacao" ] . ToSt r i ng( ) ;
}
conn. Cl ose( ) ;
}

A prxima imagem mostra seu painel de cdigo com o mtodo CarregaContato:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 267

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Para utilizar o objeto Command precisamos informar o comando SQL e qual objeto
Connection ele deve utilizar para executar o comando. Fizemos isso utilizando a
seguinte linha de cdigo informando os valores por parmetro no construtor da
classe quando instanciamos o objeto:

Sql Command cmd = new Sql Command( " SELECT * FROM Cont at o WHERE
Cont at oI D = " + cont at oI D, conn) ;

Poderamos informar estes valores por propriedades tambm se usssemos o
cdigo abaixo onde CommandText a propriedade que recebe o comando SQL e
Connection a propriedade que recebe o objeto de conexo.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 268

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Sql Command cmd = new Sql Command( ) ;
cmd. CommandText = " SELECT * FROM Cont at o WHERE Cont at oI D =
" + cont at oI D;
cmd. Connect i on = conn;

O objeto DataReader utilizado sempre que formos retornar um conjunto de
valores do banco de dados (utilizando o mtodo ExecuteReader do objeto
Command). O criamos da seguinte forma:

Sql Dat aReader dr ;

Como estamos usando o modelo conectado, antes de executar o Command
precisamos abrir a conexo. S ento executamos o mtodo ExecuteReader
atribuindo o mesmo ao objeto DataReader como fizemos com o cdigo:

conn. Open( ) ;
dr = cmd. Execut eReader ( ) ;

A propriedade HasRows do objeto DataReader retorna True se algum registro foi
retornado e False se o DataReader no tem nenhum registro (a tabela estava vazia
por exemplo).

dr . HasRows

O mtodo Read do objeto DataReader move o cursor para o prximo registro:

dr . Read( ) ;

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 269

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O objeto DataReader disponibiliza uma forma de ler os registros apenas para a
frente e no modo de leitura apenas. Isso quer dizer que no podemos alterar
registros usando o DataReader e nem voltar para traz na leitura, apenas para a
frente. Toda vez que executamos o mtodo Read ele move para o prximo
registro.

Sempre necessrio executar o mtodo Read do objeto DataReader pelo menos
uma vez como fizemos no exemplo. Isso porque no inicio o DataReader aponta
para um local conhecido como BOF (Begin Of File) que no tem nenhum dado.
Quando usado o mtodo Read pela primeira vez o cursor ento posicionado no
primeiro registro. Cada vez que o mtodo Read for executado o cursor move para
o prximo registro at que chegue ao EOF (End Of File), ou seja, quando
ultrapassar o ltimo registro. Neste caso mtodo Read retorna o valor False. Isso
permite que voc utilize esse mtodo para varrer toda uma tabela atravs de uma
estrutura de repetio, While, por exemplo:

whi l e ( dr . Read( ) ) {
l i st Box1. I t ems. Add( dr [ " Nome" ] . ToSt r i ng( ) ) ;
}

No cdigo acima voc poderia estar populando todos os valores de um
DataReader em um listBox usando o mtodo Read que retorna True enquanto
tiver registros sempre posicionando no registro abaixo at que chegue ao EOF
retornando False fazendo com que o While para a execuo da repetio.

Quando o cursor estiver em um registro voc recupera um valor informando o
nome da coluna ou um ndice. O seguinte exemplo mostra atravs do nome da
coluna:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 270

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

t xt Nome. Text = dr [ " Nome" ] . ToSt r i ng( ) ;

O seguinte exemplo mostra usando o ndice:

t xt Nome. Text = dr [ 0] . ToSt r i ng( ) ;

O ndice 0 (zero) retorna o valor da primeira coluna, o 1 (um) da segunda e assim
sucessivamente de acordo com o comando SQL. Se voc utilizar o comando:

" SELECT * FROM Cont at o

Ento os as colunas sero recuperadas na ordem que esto no banco de dados, j
se voc usar um comando SQL como esse:

" SELECT Nome, Tel ef one FROM Cont at o

O ndice 0 (zero) ser o Nome e o 1 (um) o Telefone ou seja, a ordem dos ndices
de acordo com a consulta SQL.

Sempre necessrio fechar a conexo quando a mesma no for mais ser utilizada
para liberar recursos como mostra o cdigo:

conn. Cl ose( ) ;

13 Adicione o seguinte cdigo no final do mtodo CadastroContato_Load como
mostra a prxima imagem. Este cdigo chama os mtodos CarregarContatos e
CarregarEmpresas, aps verifica se existe algum contato cadastrado (se tem
algum contato no ListBox1) e se sim chama o mtodo CarregarContato passando
por parmetro o cdigo do primeiro contato do ListBox1.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 271

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Car r egar Cont at os( ) ;
Car r egar Empr esas( ) ;
i f ( l i st Box1. I t ems. Count > 0)
{
Car r egaCont at o( ( i nt ) l i st Box1. Sel ect edVal ue) ;
}



Se voc executar e testar sua aplicao agora como mostra a prxima ser exibido
os contatos no listBox1, as empresas no cmbEmpresa e o primeiro contato
cadastrado ter seus dados exibidos como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 272

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



14 Vamos agora implementar o cdigo que permite que ao selecionarmos um
contato no listBox1 sejam exibidos seus dados nos controles a direita, para isso de
um clique duplo sobre o listBox1 e dentro procedimento de evento
listBox1_SelectedIndexChanged criado digite o seguinte cdigo:


i f ( l i st Box1. Sel ect edVal ue. ToSt r i ng( ) ! = " Syst em. Dat a. Dat aRowVi ew" )
{
Car r egaCont at o( ( i nt ) l i st Box1. Sel ect edVal ue) ;
}

A prxima imagem mostra seu painel de cdigo com as instrues que acabamos
de digitar. O if apenas verifica se o evento no esta sendo disparado na hora em
que o formulrio esta sendo criado, ou seja, quando esta o listBox1 esta sendo
carregado pela primeira vez. Sem esse if teramos um erro ao abrir o formulrio.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 273

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




Se voc testar sua aplicao agora poder navegar entre os contatos cadastrados
no listBox1 de forma que seus dados sejam exibidos nos controles conforme
definimos no mtodo CarregaContato.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 274

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Lembre-se que ser necessrio utilizar sempre o objeto DataReader quando voc
for ler um conjunto de valores como fizemos no mtodo CarregaContato. E
tambm sempre ser usado o mtodo ExecuteReader do objeto Command neste
caso.

Vamos agora aprender a utilizar o mtodo ExecuteNonQuery do objeto
Command que sempre usado quando formos utilizar os comandos SQL para
UPDATE, INSERT e DELETE.

15 Antes de qualquer coisa de um clique duplo sobre o boto btnAdicionar e
digite o seguinte cdigo dentro do procedimento de evento Click do mesmo:

i f ( bt nAdi ci onar . Text == " Adi ci onar " )
{
bt nAdi ci onar . Text = " Cancel ar " ;
bt nI nser i r . Text = " I nser i r " ;
l i st Box1. Enabl ed = f al se;
t xt Nome. Text = " " ;
cmbEmpr esa. Sel ect edI ndex = 0;
t xt Car go. Text = " " ;
t xt Tel ef one. Text = " " ;
t xt Cel ul ar . Text = " " ;
t xt Ender eco. Text = " " ;
t xt Ci dade. Text = " " ;
t xt UF. Text = " " ;
t xt CEP. Text = " " ;
t xt Emai l . Text = " " ;
t xt Nasci ment o. Text = " " ;
t xt Obser vacao. Text = " " ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 275

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

}
el se
{
bt nAdi ci onar . Text = " Adi ci onar " ;
bt nI nser i r . Text = " Sal var " ;
l i st Box1. Enabl ed = t r ue;
}

Este cdigo verifica se o a propriedade Text do btnAdicionar Adicionar, se sim
executado o cdigo que prepara o formulrio para a insero de um novo contato
zerando os controles e bloqueando a navegao, se no volta-se ao normal
habilitando novamente a navegao e exibindo os dados do contato selecionado no
listBox1. A prxima imagem mostra o cdigo no Visual Studio:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 276

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



16 Vamos agora implementar o cdigo que permite inserir e atualizar dados. Para
isso de um clique duplo sobre o boto btnInserir e digite o seguinte cdigo dentro
do procedimento de evento criado:

St r i ng cmdSql , st r Mensagem;

i f ( bt nI nser i r . Text == " I nser i r " )
{
cmdSql = " I NSERT I NTO CONTATO ( Empr esaI D, Nome, Car go,
Tel ef one, Cel ul ar , Ender eco, Ci dade, UF, CEP, Emai l , Dat aNasci ment o,
Obser vacao) VALUES ( " + cmbEmpr esa. Sel ect edVal ue. ToSt r i ng( ) + " , ' " +
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 277

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

t xt Nome. Text + " ' , ' " + t xt Car go. Text + " ' , ' " + t xt Tel ef one. Text +
" ' , ' " + t xt Cel ul ar . Text + " ' , ' " + t xt Ender eco. Text + " ' , ' " +
t xt Ci dade. Text + " ' , ' " + t xt UF. Text + " ' , ' " + t xt CEP. Text + " ' , ' " +
t xt Emai l . Text + " ' , ' " + t xt Nasci ment o. Text + " ' , ' " +
t xt Obser vacao. Text + " ' ) " ;
st r Mensagem= " Cont at o i nser i do comsucesso! ! ! " ;
bt nAdi ci onar . Text = " Adi ci onar " ;
bt nI nser i r . Text = " Sal var " ;
l i st Box1. Enabl ed = t r ue;
}
el se
{
cmdSql = " UPDATE CONTATO SET Empr esaI D = " +
cmbEmpr esa. Sel ect edVal ue. ToSt r i ng( ) + " , Nome = ' " + t xt Nome. Text +
" ' , Car go = ' " + t xt Car go. Text + " ' , Tel ef one = ' " + t xt Tel ef one. Text +
" ' , Cel ul ar = ' " + t xt Cel ul ar . Text + " ' , Ender eco = ' " +
t xt Ender eco. Text + " ' , Ci dade = ' " + t xt Ci dade. Text + " ' , UF = ' " +
t xt UF. Text + " ' , CEP = ' " + t xt CEP. Text + " ' , Emai l = ' " + t xt Emai l . Text
+ " ' , Dat aNasci ment o = ' " + t xt Nasci ment o. Text + " ' , Obser vacao = ' " +
t xt Obser vacao. Text + " ' WHERE Cont at oI D = " +
l i st Box1. Sel ect edVal ue. ToSt r i ng( ) ;
st r Mensagem= " Dados sal vos comsucesso! ! ! " ;
}

Sql Connect i on conn = new
Sql Connect i on( Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osCo
nnect i onSt r i ng" ] . ToSt r i ng( ) ) ;
Sql Command cmd = new Sql Command( cmdSql , conn) ;
conn. Open( ) ;
cmd. Execut eNonQuer y( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 278

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

conn. Cl ose( ) ;
Car r egar Cont at os( ) ;
MessageBox. Show( st r Mensagem) ;

A prxima imagem mostra seu painel de cdigo com as novas instrues:



Note que primeiramente declaramos duas variveis, uma que armazena o comando
SQL (cmdSql) e outra a mensangem (strMensagem) que ser exibida ao usurio
quando clicar no boto dependendo da ao executada.

St r i ng cmdSql , st r Mensagem;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 279

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Ento usamos um if (estrutura de deciso) para verificar se a propriedade Text do
boto brnInserir igual a Inserir, porque se sim vamos atribuir na varivel
cmdSql um comando (INSERT) para inserir dados e se no vamos atribuir a
mesma varivel um comando (UPDATE) para atualizar dados.

i f ( bt nI nser i r . Text == " I nser i r " )

O cdigo abaixo mostra principalmente o comando INSERT, note que atribumos os
valores dos controles concatenando os mesmos na string. Lembre-se de atribuir os
valores do tipo string no comando utilizando em aspas simples, os nmeros no
precisam de aspas simples. Para finalizar atribumos a mensagem adequada a
varivel strMensagem e configuramos as propriedades dos controles voltando os
nomes originais dos botes e habilitando novamente o listBox1.

cmdSql = " I NSERT I NTO CONTATO ( Empr esaI D, Nome, Car go, Tel ef one,
Cel ul ar , Ender eco, Ci dade, UF, CEP, Emai l , Dat aNasci ment o, Obser vacao)
VALUES ( " + cmbEmpr esa. Sel ect edVal ue. ToSt r i ng( ) + " , ' " + t xt Nome. Text
+ " ' , ' " + t xt Car go. Text + " ' , ' " + t xt Tel ef one. Text + " ' , ' " +
t xt Cel ul ar . Text + " ' , ' " + t xt Ender eco. Text + " ' , ' " + t xt Ci dade. Text +
" ' , ' " + t xt UF. Text + " ' , ' " + t xt CEP. Text + " ' , ' " + t xt Emai l . Text +
" ' , ' " + t xt Nasci ment o. Text + " ' , ' " + t xt Obser vacao. Text + " ' ) " ;
st r Mensagem= " Cont at o i nser i do comsucesso! ! ! " ;
bt nAdi ci onar . Text = " Adi ci onar " ;
bt nI nser i r . Text = " Sal var " ;
l i st Box1. Enabl ed = t r ue;


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 280

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O prximo cdigo mostra o comando UPDATE e a atribuio da mensagem
apropriada que ser exibida ao usurio. O comando UPDATE montado como
fizemos com o INSERT, ou seja, concatenando os valores dos controles de forma a
criar uma string com o comando a ser executado com os valores que sero
atualizados. Note aqui a claususa WHERE que permite identificar qual contato ter
seus dados atualizados.

cmdSql = " UPDATE CONTATO SET Empr esaI D = " +
cmbEmpr esa. Sel ect edVal ue. ToSt r i ng( ) + " , Nome = ' " + t xt Nome. Text +
" ' , Car go = ' " + t xt Car go. Text + " ' , Tel ef one = ' " + t xt Tel ef one. Text +
" ' , Cel ul ar = ' " + t xt Cel ul ar . Text + " ' , Ender eco = ' " +
t xt Ender eco. Text + " ' , Ci dade = ' " + t xt Ci dade. Text + " ' , UF = ' " +
t xt UF. Text + " ' , CEP = ' " + t xt CEP. Text + " ' , Emai l = ' " + t xt Emai l . Text
+ " ' , Dat aNasci ment o = ' " + t xt Nasci ment o. Text + " ' , Obser vacao = ' " +
t xt Obser vacao. Text + " ' WHERE Cont at oI D = " +
l i st Box1. Sel ect edVal ue. ToSt r i ng( ) ;
st r Mensagem= " Dados sal vos comsucesso! ! ! " ;


O que fizemos at aqui foi apenas montar o comando apropriadado, voc pode
fazer da maneira que desejar, mas lembre-se que ser necessrio informar o
comando SQL ao objeto Command como fizemos no seguinte cdigo:

Sql Command cmd = new Sql Command( cmdSql , conn) ;

Para executar o comando necessrio, um objeto Connection, a abertura da
conexo e como estamos executando um comando UPDATE ou INSERT ser usado
o mtodo ExecuteNonQuery como mostra o cdigo abaixo:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 281

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Sql Connect i on conn = new
Sql Connect i on( Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osCo
nnect i onSt r i ng" ] . ToSt r i ng( ) ) ;
Sql Command cmd = new Sql Command( cmdSql , conn) ;
conn. Open( ) ;
cmd. Execut eNonQuer y( ) ;
conn. Cl ose( ) ;

Finalmente chamamos novamente o mtodo CarregarContatos porque no caso de
ter sido feita uma insero necessrio que o novo contato seja exibido no
listBox1. Tambm exibimos a mensagem que esta na varivel strMensagem para o
usurio:

Car r egar Cont at os( ) ;
MessageBox. Show( st r Mensagem) ;

17 Para finalizar apenas vamos adicionar o cdigo para excluso de contatos.
Para isso de um clique duplo sobre o boto btnExcluir e no procedimento de
evento criado digite o seguinte cdigo:

i f ( l i st Box1. I t ems. Count > 0)
{
Sql Connect i on conn = new
Sql Connect i on( Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osCo
nnect i onSt r i ng" ] . ToSt r i ng( ) ) ;
Sql Command cmd = new Sql Command( " DELETE FROM Cont at o
WHERE Cont at oI D = " + l i st Box1. Sel ect edVal ue. ToSt r i ng( ) , conn) ;
conn. Open( ) ;
cmd. Execut eNonQuer y( ) ;
conn. Cl ose( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 282

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Car r egar Cont at os( ) ;
MessageBox. Show( " Cont at o excl ui do comsucesso! ! ! " ) ;
}
el se
{
MessageBox. Show( " No possi vel excl ui r ! ! ! " ) ;
}

O cdigo acima apenas verifica se existe algum registro no listBox1 para saber se
algo pode ser excludo e se sim utiliza o objeto Command com o mtodo
ExecuteNonQuery de forma semelhante ao que fizemos com o UPDATE, como
mostra a prxima imagem:



18 Para a execuo do formulrio CadastroContato vamos adicionar mais um
Button na toolStrip1 do formulrio Projetos como mostra a prxima imagem:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 283

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




19 Voc pode alterar a propriedade DisplayStyle do Button que acabou de
adicionar para Text como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 284

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



20 Altere tambm a propriedade DisplayStyle do toolStripButton1 (boto que
salva as alteraes nos projetos) para Text.

21 Na janela Properties altere a propriedade Text do toolStripButton2 (boto
que acabamos de adicionar) para Contatos como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 285

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



22 Altere tambm a propriedade Text do toolStripButton1 para Salvar.

23 Adicione um Separator (Separador) para ajudar a organizar como mostra a
imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 286

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



24 Arraste o separador para que o mesmo se posicione entre os botes Salvar e
Contatos.

25 De um clique duplo sobre o boto toolStripButton2 (Contatos) e adicione o
seguinte cdigo no procedimento de evento criado:

Cadast r oCont at o f r m= new Cadast r oCont at o( ) ;
f r m. ShowDi al og( ) ;

A imagem mostra seu painel de cdigo:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 287

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



26 Execute sua aplicao.



27 Clique em Contatos para abrir o formulrio que acabamos de criar. Agora
voc pode testar todas as operaes que criamos para o mesmo.
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 288

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




Com voc viu para inserir, atualizar e remover dados ns concatenamos
diretamente os valores criando uma string do comando SQL. Esta uma forma
prtica e rpida, mas em uma aplicao WEB no muito segura porque permite o
uso de injeo de SQL, uma tcnica utilizada por Hackers para invadir seu site ou
aplicao web. Para evitar isso podemos utilizar parmetros, como fizemos com o
objeto DataAdapter. Vou mostrar o uso de parmetros com o comando DELETE
que mais simples para que voc possa compreender, mas voc pode aplicar os
conhecimentos adquiridos aqui com os outros comandos. Segue como ficaria nosso
comando DELETE usando parmetros:

Sql Connect i on conn = new
Sql Connect i on( Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osCo
nnect i onSt r i ng" ] . ToSt r i ng( ) ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 289

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Sql Command cmd = new Sql Command( " DELETE FROM Cont at o
WHERE Cont at oI D = @Cont at oI D" , conn) ;
cmd. Par amet er s. Add( " @Cont at oI D" , Sql DbType. I nt , 4,
" Cont at oI D" ) ;
cmd. Par amet er s[ " @Cont at oI D" ] . Val ue =
( i nt ) l i st Box1. Sel ect edVal ue;
conn. Open( ) ;
cmd. Execut eNonQuer y( ) ;
conn. Cl ose( ) ;
Car r egar Cont at os( ) ;
MessageBox. Show( " Cont at o excl ui do comsucesso! ! ! " ) ;

Note que no cdigo acima mudamos apenas uma linha de cdigo (a que atribui o
comando SQL) e adicionamos mais duas linhas de cdigo:

Sql Command cmd = new Sql Command( " DELETE FROM Cont at o
WHERE Cont at oI D = @Cont at oI D" , conn) ;
cmd. Par amet er s. Add( " @Cont at oI D" , Sql DbType. I nt , 4,
" Cont at oI D" ) ;
cmd. Par amet er s[ " @Cont at oI D" ] . Val ue =
( i nt ) l i st Box1. Sel ect edVal ue;


Nosso comando SQL agora ao invs de j receber o valor concatenado faz
referencia a um parmetro que ns criamos, lembre-se que um parmetro deve
sempre ter seu nome antecedido pelo smbolo de @. Eu costumo criar meus
parmetros sempre com o mesmo nome do campo que eles representam para
facilitar a identificao.

DELETE FROM Cont at o WHERE Cont at oI D = @Cont at oI D"
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 290

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


Em banco de dados Access parmetros so sempre o sinal de interrogao, o
Access no suporta nome de parmetros como usamos aqui mas voc deve seguir
os prximos passos igualmente com Access, apenas certifique-se de adicionar os
parmetros na ordem que colocou os sinais de interrogao no comando SQL.

Todos os parmetros que nos criamos no comando SQL precisam ser criados e
adicionados lista de parmetros do objeto Command. Para isso utilizamos o
seguinte cdigo:

cmd. Par amet er s. Add( " @Cont at oI D" , Sql DbType. I nt , 4, " Cont at oI D" ) ;

Teremos uma linha de cdigo destas para cada parmetro do comando SQL, no
nosso caso temos apenas um.

Como j vimos no capitulo tres, para adicionar um parmetro precisamos informar
o nome do mesmo que precisa ser idntico ao usado no comando (menos no caso
do Acess), o tipo de dado que o parmetro recebe de acordo com o banco e dados
(no caso do SQL Server o tipos esto disponveis no enumerador SqlDbType), o
tamanho do campo e o nome da coluna no banco de dados que o parmetro
representa.

Depois dos parmetros criados precisamos informar um valor para cada um deles.
Fizemos isso no exemplo utilizando o seguinte cdigo:

cmd. Par amet er s[ " @Cont at oI D" ] . Val ue = ( i nt ) l i st Box1. Sel ect edVal ue;

O cdigo acima simples, fazemos referencia ao parmetro utilizando o nome do
mesmo e quem recebe o valor a propriedade Value. O valor deve ser do tipo de
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 291

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

dados que o parmetro aceita, ou seja, o tipo que foi definido quando criamos o
parmetro.

Se voc desejar pode alterar o cdigo para excluso do formulrio como mostra a
prxima imagem:



Para finalizar este capitulo quero que voc saiba que pode utilizar ao invs de um
comando SQL uma Stored Procedure em seus programas. Para isso voc precisa
alterar a propriedade CommandType do objeto Command para
StoredProcedure e na propriedade CommandText informar o nome da Stored
Procedure ao invs do comando SQL..
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 292

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




Capitulo 5
Tratamento de erros em consultas a
bancos de dados

Geralmente os erros em manipulao de dados ocorrem em dois momentos:
Na hora da conexo com o banco de dados.
Quando tentamos executar um comando SQL.

Os erros que ocorrem na hora da conexo com o banco de dados frequentemente
esto associados a:
String de conexo invalida (errada).
Servidor de banco de dados ou arquivo do banco de dados no existe ou no
esta disponvel.
Falha no login (usurio ou senha invlido).

Por sua vez, os erros mais comuns quando tentamos executar um comando SQL
atravs de um DataAdapter ou Command so:
Sintaxe do comando SQL (SELECT, UPDATE, INSERT, DELETE) incorretas.
Nome da tabela ou coluna incorretos.

Para tratar erros com manipulao de dados voc pode usar a estrutura de
tratamento de erros Try..Catch..Finally.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 293

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

t r y
{
conn. Open( ) ;
}
cat ch ( Except i on e)
{
MessageBox. Show( e. Message) ;
}

O bloco de cdigo acima demonstra como utilizar o bloco Try..Catch..Finally para
tratar erros na hora da conexo. No cdigo acima caso ocorra um erro a mensagem
do mesmo ser exibida utilizado o MessageBox.

A classe SqlException (ou OleDbException, ou outra dependendo do banco e
dados que voc esta utilizando) ajuda a determinar qual erro esta ocorrendo.

O seguinte cdigo demostra como utilizar esta classe para tratar erros usando, por
exemplo, o mtodo CarregaContato do formulrio CadastroContato da nossa
aplicao de exemplo.

t r y
{
conn. Open( ) ;
dr = cmd. Execut eReader ( ) ;

i f ( dr . HasRows)
{
dr . Read( ) ;
t xt Nome. Text = dr [ " Nome" ] . ToSt r i ng( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 294

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

cmbEmpr esa. Sel ect edVal ue =
dr [ " Empr esaI D" ] . ToSt r i ng( ) ;
t xt Car go. Text = dr [ " Car go" ] . ToSt r i ng( ) ;
t xt Tel ef one. Text = dr [ " Tel ef one" ] . ToSt r i ng( ) ;
t xt Cel ul ar . Text = dr [ " Cel ul ar " ] . ToSt r i ng( ) ;
t xt Ender eco. Text = dr [ " Ender eco" ] . ToSt r i ng( ) ;
t xt Ci dade. Text = dr [ " Ci dade" ] . ToSt r i ng( ) ;
t xt UF. Text = dr [ " UF" ] . ToSt r i ng( ) ;
t xt CEP. Text = dr [ " CEP" ] . ToSt r i ng( ) ;
t xt Emai l . Text = dr [ " Emai l " ] . ToSt r i ng( ) ;
t xt Nasci ment o. Text =
Dat eTi me. Par se( dr [ " Dat aNasci ment o" ] . ToSt r i ng( ) ) . ToShor t Dat eSt r i ng( ) ;
t xt Obser vacao. Text = dr [ " Obser vacao" ] . ToSt r i ng( ) ;
}
}
cat ch ( Syst em. Dat a. Sql Cl i ent . Sql Except i on e)
{
swi t ch ( e. Number )
{
case 17:
MessageBox. Show( " Nome do ser vi dor i nval i do" ) ;
br eak;
case 156:
case 170:
MessageBox. Show( " Si nt axe SQL er r ada" ) ;
br eak;
case 207:
MessageBox. Show( " Nome da col una i nval i da" ) ;
br eak;
case 208:
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 295

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

MessageBox. Show( " Nome da t abel a i nval i da" ) ;
br eak;
case 18452:
MessageBox. Show( " User name i nval i do" ) ;
br eak;
case 18456:
MessageBox. Show( " Passwor d i nval i do" ) ;
br eak;
case 4060:
MessageBox. Show( " Banco de dados i nval i do" ) ;
br eak;
}
}
cat ch ( Except i on e)
{
MessageBox. Show( e. Message) ;
}
f i nal l y
{
i f ( conn. St at e == Connect i onSt at e. Open)
{
conn. Cl ose( ) ;
}
}


Note abaixo que utilizamos a classe SqlException para determinar o numero do
erro para mostrar a mensagem apropriada. Alm na propriedade Number que
retorna o numero do erro voc tem a sua disposio a propriedade Message que
descreve o erro, a propriedade Class que retorna o nvel de severidade do erro e
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 296

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

LineNumber que retorna a linha do comando SQL ou Store Procedure que contem
o erro.

cat ch ( Syst em. Dat a. Sql Cl i ent . Sql Except i on e)
{
swi t ch ( e. Number )
{
case 17:
MessageBox. Show( " Nome do ser vi dor i nval i do" ) ;
br eak;
case 156:
case 170:
MessageBox. Show( " Si nt axe SQL er r ada" ) ;
br eak;
case 207:
MessageBox. Show( " Nome da col una i nval i da" ) ;
br eak;
case 208:
MessageBox. Show( " Nome da t abel a i nval i da" ) ;
br eak;
case 18452:
MessageBox. Show( " User name i nval i do" ) ;
br eak;
case 18456:
MessageBox. Show( " Passwor d i nval i do" ) ;
br eak;
case 4060:
MessageBox. Show( " Banco de dados i nval i do" ) ;
br eak;
}
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 297

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

}


Logo aps o tratamento de erros utilizando a classe especializada SqlException
temos um outro catch no exemplo para tratar erros que a classe do Sql Server no
consegue tratar. Note que este catch deve estar sempre aps a classe
especializada porque ele trata qualquer erro de forma que o SqlException nunca
seja usado se ele estiver antes.

cat ch ( Except i on e)
{
MessageBox. Show( e. Message) ;
}

No bloco Finally verificamos se a conexo esta aberta para fech-la. muito
importante que voc verifique se a mesma esta aberta porque o bloco Finally
sempre executado, com erro ou no, ento se na hora que voc tentou abrir a
conexo teve um erro e tratou o mesmo agora conexo esta fechada de forma
que se voc executar o fechamento novamente vamos ter um novo erro, s que
este no estaria sendo tratado.

f i nal l y
{
i f ( conn. St at e == Connect i onSt at e. Open)
{
conn. Cl ose( ) ;
}
}

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 298

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Para uma lista completa das propriedades da classe SqlException voc pode
pesquisar na documentao do Visual Studio por SqlError.






Capitulo 6
Transaes

Suponha que voc esteja desenvolvendo uma aplicao de e-commerce, por
exemplo. O cliente adiciona os produtos que ele quer adicionar no carrinho de
compra e parte para finalizar o pedido. Para inserir o pedido no banco de dados
voc tem duas tabelas, uma que armazena os pedidos e outra os itens dos pedidos.
Ento voc precisa adicionar valores como numero do pedido, data, forma de
pagamento, local de entrega na tabela referente ao pedido e todos os produtos so
adicionados na tabela itens de pedido com suas respectivas quantidades, cada uma
associada ao pedido atravs de uma chave estrangeira, por exemplo. O que eu
quero que voc entenda que para inserir um pedido precisamos manipular duas
tabelas ao mesmo tempo, inserir o pedido e os itens. Vamos supor que o pedido foi
inserido corretamente, mas durante a insero dos itens ocorreu um erro. Foi
inserido o pedido, mas sem os produtos ou sem todos os produtos. Agora voc tem
um problema de inconsistncia no seu banco de dados. Imagine os problemas que
isso pode lhe causar? Reclamaes... pedidos entregues incompletos e etc... Como
podemos contornar este problema sendo que antes de inserir um item de pedido
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 299

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

precisamos ter inserido j o pedido para termos o cdigo do mesmo que ser usado
na insero dos itens?

Para isso usamos as transaes. Uma transao uma unidade de trabalho,
atravs dela ou tudo executado ou nada. Se no ultimo momento tivermos um
erro tudo o que foi feito desfeito (conhecido como Roll Back) e se tudo ocorrer
adequadamente ento ocorre o que chamamos de Commit, ou seja, tudo salvo no
banco de dados.

Uma transao tem quatro propriedades, conhecidas como ACID:
Atomicidade vem do indivisvel (atmico), uma transao atmica
porque ela possui um conjunto de operaes que deve ser executada
completamente ou nada deve ser executado.
Consistncia as transao no podem quebrar as regras do banco de
dados, ou seja, a consistncia precisa ser assegurada.
Isolao Quando voc cria uma transao pode especificar o nvel de
isolao da mesma. O nvel de isolao (Isolation Level) determina o efeito
que uma transao ter sobre outras transaes que tiverem sendo
executadas ao mesmo tempo. O ideal seria que uma transao fosse
completamente isolada de outra concorrente, entretanto uma transao
frequentemente tenta acessar dados que esto em uso por outra transao,
o nvel de isolamento especifica o que deve acontecer quando isso ocorrer.
Para saber mais sobre isolao voc pode utilizar a documentao do Visual
Studio consultando IsolationLevel Enumeration.
Durabilidade Os efeitos de uma transao em caso de sucesso (Commit)
devem ser garantidos pelo sistema mesmo em caso de uma falha, por
exemplo, no computador logo aps o Commit.

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 300

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

O processo de execuo de uma transao local pode ser definido em cinco passos:

1. Abrir conexo com o banco de dados (objeto Connection).
2. Iniciar uma transao (objeto Transaction).
3. Criar comandos (objetos Command) que devem ser executados dentro do
escopo da transao.
4. Executar os comandos (objetos Command).
5. Em caso de sucesso consolidar no banco de dados a transao (Commit) ou
desfazer (Roll Back).

O seguinte cdigo utiliza os passos acima para executar uma transao. Neste
exemplo para simplificar eu utilizei uma mesma tabela no banco de dados para que
voc possa se desejar testa-la na aplicao exemplo sem criar outras tabelas ou
fazer alteraes que desfoquem do objetivo que entender as transaes e como
usa-las. Normalmente as transaes ocorrem utilizando tabelas diferentes.

Sql Connect i on conn = new
Sql Connect i on( Cont r ol ePr oj et os. Pr oper t i es. Set t i ngs. Def aul t [ " Pr oj et osCo
nnect i onSt r i ng" ] . ToSt r i ng( ) ) ;
conn. Open( ) ;
Sql Tr ansact i on t r an = conn. Begi nTr ansact i on( ) ;
Sql Command cmd1 = new Sql Command( " I NSERT I NTO CONTATO
( Empr esaI D, Nome, Car go) VALUES ( 1, ' Af onso' , ' Di r et or ' ) " , conn, t r an) ;
Sql Command cmd2 = new Sql Command( " I NSERT I NTO CONTATO
( Empr esaI D, Nome, Car go) VALUES ( 1, ' Gui l her me' , ' Ger ent e TI ' ) " , conn,
t r an) ;
t r y
{
cmd1. Execut eNonQuer y( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 301

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

cmd2. Execut eNonQuer y( ) ;
t r an. Commi t ( ) ;
MessageBox. Show( " Sucesso! ! ! ( Commi t ) " ) ;
}
cat ch
{
t r an. Rol l back( ) ;
MessageBox. Show( " Er r o! ! ! ( Rol l Back) " ) ;
}
f i nal l y
{
i f ( conn. St at e == Connect i onSt at e. Open)
{
conn. Cl ose( ) ;
}
}

Note que foi necessrio informar mais um parametro quando criamos os objetos
Command, a transao. Voc poderia informar tmbm atravs da propriedade
Transaction como o exemplo:

cmd1. Tr ansact i on = t r an;

O mtodo Commit do objeto Transaction usado para consolidar os dados no
banco. O mtodo Roolback para desfazer. Se voc no usar o Try...catch...finally
para tratar erros ou no usar o mtodo Rollback e tiver algum erro na execuo
do comando o Commit no ser executado ou seja o Rollback ser feito de forma
automatica.


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 302

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS




Capitulo 7
Finalizando a aplicao de exemplo

Nossa aplicao de exemplo esta quase pronta, apenas para termin-la vamos
neste capitulo relembrar alguns aspectos importantes do curso. Claro que devido a
necessidade de mostrar diferente tcnicas e formas de uso do ADO.NET este
exemplo ficou um pouco desorganizado. Procurei a medida do possvel no me
prender muito as configuraes estticas e controles para focar no ncleo do
ADO.NET. Provavelmente suas aplicaes no sero assim, elas devero seguir um
modelo mais organizado e voc vai criar mais mtodos e algumas classes que o
ajudaro a orgazinar sua aplicao e reaproveitar o cdigo desenvolvido.

1 - Vamos adicionar um novo formulrio a nossa aplicao chamado
CadastroTipoEmpresa como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 303

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Na janela Data Sources note que temos os dois DataSets criados na nossa
aplicao e que dentro deles temos os seus respectivos DataTables. Se voc clicar
em uma DataTable e arrasta-la para o formulrio j sero criados os objetos e
controles necessrios para a manipulao dos dados. No entando voc pode
apresentar esses controles de duas formas: DataGridView ou Details. Basta
escolher o desejado como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 304

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



2 Escolha Details em TipoEmpresa como mostrou a imagem anterior.

Note que agora o cone que identifica o DataTable muda para representar a opo
escolhida:


Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 305

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


3 Arrasta para o formulrio o DataTable TipoEmpresa da janela Data Sources
e organize os controles criados automaticamente como mostra a imagem:



Pronto, foi criado nosso formulrio para cadastrar os tipos de empresa.

4 - Vamos agora adicionar um boto e mudar a propriedade Text do mesmo para
Novo s que no formulrio CadastroEmpresas como mostra a imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 306

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



O boto que acabamos de adicionar permitira abrir a janela que cadastra os tipos
de empresas a partir do formulrio CadastroEmpresas.

5 De um clique duplo sobre o boto que acabamos de adicionar e digite o
seguinte cdigo dentro do procedimento de evento criado:

Cadast r oTi poEmpr esa f r m= new Cadast r oTi poEmpr esa( ) ;
f r m. ShowDi al og( ) ;
Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 307

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS


t hi s. t i poEmpr esaTabl eAdapt er . Fi l l ( t hi s. pr oj et osDat aSet . Ti poEmpr esa) ;
t hi s. comboBox1. Ref r esh( ) ;

O cdigo acima abre o formulrio CadastroTipoEmpresa. Note o seguinte cdigo
adicional:

t hi s. t i poEmpr esaTabl eAdapt er . Fi l l ( t hi s. pr oj et osDat aSet . Ti poEmpr esa) ;
t hi s. comboBox1. Ref r esh( ) ;

Quando executado o mtodo ShowDialog o formulrio CadastroTipoEmpresa
aberto, podemos inserir um ou vrios tipos de empresas neste formulrio. Quando
fechamos ele o cdigo acima carrega novamente a DataTable TipoEmpresa agora
tambm com os novos tipos que acabamos de adicionar e atualiza o comboBox1
para que os mesmos j estejam disponveis para seleo.

6 Abra agora o formulrio Projetos.

7 Adicione mais um boto chamado Empresas como a prxima imagem:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 308

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



Note que eu separei os botes com separadores (Separator) para organizar.

8 De um clique duplo sobre o boto Empresas e adicione o seguinte cdigo:

Cadast r oEmpr esas f r m= new Cadast r oEmpr esas( ) ;
f r m. ShowDi al og( ) ;

Seu painel de codigo deve estar assim:

Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 309

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS



9 Execute sua aplicao:



Curso Banco de dados com C# e o Visual Studio .NET 2005

http://www.juliobattisti.com.br - A Sua Sala de Aula na Internet
Autor: Herbert Moroni Cavallari da Costa Gois blog: www.moroni.com.br Pgina 310

ESTE MATERIAL NO PODE SER UTILIZADO EM SALA DE AULA E EM TREINAMENTOS

Agora a partir do formulrio de projetos voc pode navegar e abrir qualquer outro
formulrio que criamos.

Para sua aplicao ficar completa falta implementar validaes e formatar melhor
os controles Windows. Esse assunto no ser abordado neste material at porque
cada um dos controles tem muitas propriedades, mtodos e eventos que podem ser
utilizados. Mas nosso objetivo com o material foi atingido. Os conhecimento que
voc aprendeu aqui lhe do base para desenvolver suas aplicao e no faltam
exemplos na internet de como utilizar os controles.

Lembre-se que os conhecimentos adquiridos neste material sobre ADO.NET podem
e devem ser aplicados no s no desenvolvimento de aplicaes Windows mas sim
todas as aplicaes que podem ser criadas utilizando a plataforma.NET incluindo
ASP.NET, Web Services e aplicaes para dispositivos moveis. O mesmo serve para
os demais bancos de dados como MySQL, Access, Oracle...etc. Apenas usamos no
curso como exemplo uma aplicao Windows e o banco de dados SQL Server.

You might also like