DS - PARTE 1

58
PROGRAMAÇÃO DE COMPUTADORES BANCO DE DADOS EM c Sharp USANDO EF 1. Crie um projeto chamado . 2. Crie três pastas chamadas modelo, controle e visão dentro do projeto: O resultado deve ser: Agora renomeie o 1 para e arraste para a pasta visão:

description

desenvolvimento de software

Transcript of DS - PARTE 1

PROGRAMAÇÃO DE COMPUTADORES BANCO DE DADOS EM c Sharp USANDO EF

1. Crie um projeto chamado �����������.

2. Crie três pastas chamadas modelo, controle e visão dentro do projeto:

O resultado deve ser:

Agora renomeie o ���1 para ������ e arraste para a pasta visão:

Troque as propriedades do formulário para os seguintes valores:

Crie o menu para o sistema:

Siga os seguintes nomes para o �������:

Configure as imagens e defina as teclas de atalho para todos os itens como no exemplo abaixo, onde

configuramos para a opção professor:

Codifique o evento da opção �������������:

Projetaremos agora o Formulário de Aluno:

Adicione um novo formulário em visão chamado ��������:

Altere as seguintes propriedades:

Vamos desenhar agora os componentes visuais a serem controlados pelo sistema. Comece criando os

rótulos de exibição dos campos da tabela, no nosso caso, serão o código do aluno, nome, nascimento, sala,

conforme a aparência sugerida:

Nomes dos rótulos:

Nome dos componentes de navegação:

Nome dos botões com imagens na barra de navegação:

Em ������ codifique um objeto �������� no início da classe:

Chame agora o objeto criado no evento do menu que contém a opção de abrir o formulário de alunos, ou

seja, ��������������:

Agora o sistema deve abrir o formulário. Agora crie o evento ���_������� para o formulário

�������� para fechar a instancia ou você poderá abrir o formulário de aluno apenas uma única vez.

O código de geração de integração do formulário encontra-se codificado com sucesso.

Integração com ��� �! #$%&'()$*

Antes de tudo crie o banco de dados biblioteca com os seguintes valores no MYSQL:

Tabela “CURSO”

Tabela ”ALUNO”:

Ou importe o arquivo com extensão SQL que contém o backup do projeto do banco de dados. Vamos

integrar agora um arquivo de MODELO (EDMX) ao projeto. Para isso adicione um novo componente a

pasta modelo e de o nome de biblioteca, escolhendo o modelo “ADO NET Entity Data Model”:

É possível gerar um modelo vazio ou a partir de uma tabela de um banco de dados. Em nosso caso vamos

selecionar a partir do nosso banco, então iremos escolher a primeira opção:

Crie uma nova conexão com o banco de dados biblioteca no MYSQL:

Passe os dados para a conexão, como nome do servidor, usuário, senha e o escolha na lista o banco de

dados correto e confirme pressionando o botão OK:

Antes de prosseguir, modifique o nome da conexão da Entidade que será registrado em ���. ���,�� para

��������-��.�.�. Caso seja necessário gerar o processo novamente será necessário apagar o arquivo

���. ���,�� para que o sistema não gere erros: Mande excluir também a string conexão, selecione o

��.������ na parte superior da caixa de diálogo:

Selecione o banco de dados biblioteca e mude o nome para ����������.��:

Será gerada agora uma estrutura de objetos para representar todo o banco de dados, que nós usaremos

para mapear o banco de dado. Qualquer manipulação a ser feita na classe afeta diretamente o banco de

dados mapeado.

Criando a conexão com o banco de dados de forma manual

Criaremos uma classe de conexão em controle:

Na classe insira as seguintes propriedades e construtor:

Acrescente também um método para abrir o banco de dados, passando os dados da string de conexão

para o Entity Framework logo abaixo do construtor:

Vamos criar uma classe para manipular o objeto aluno no banco de dados, chamaremos o mesmo de

������� ou �������/ caso queira usar a metodologia Java:

Codificaremos agora a rotina de consulta ao banco de dados, que irá retornar uma lista para o

���.�������� de nosso formulário Aluno:

Codifique após a rotina consultar o método para inserir dados no banco de dados. Basta para isso adicionar

um objeto aluno, isso irá díspar automaticamente uma rotina de inserção no banco de dados:

Agora a rotina de remover registro, usando a mesma metodologia:

Agora podemos testar a rotina de acesso ao banco de dados. Vamos ao formulário aluno e codificaremos o

���.�������� e os ����� para referenciar os dados da tabela aluno:

Como o banco de dados encontra-se vazio, a execução não retornará valor algum. Vamos inserir um

registro no banco de dados manualmente para testar o código. Para isso vamos codificar o botão ��..

para realizar a tarefa:

Embora este código esteja correto ele não irá funcionar porque a tabela aluno possui uma chave

estrangeira que aliga com a tabela de cursos, logo se não tem nenhum curso cadastrado na tabela,

também não será possível cadastrar o aluno, para isso entre no MYSQL e cadastre um curso para que a

rotina seja corretamente executada:

Ao executar o código você deve perceber que o ���.�������� não atualizou o registro inserido, para

isso é necessário avisar o componente para atualizar manualmente a fonte de dados com o dado inserido,

porém as informações estão na tabela como podemos ver a seguir:

Reescreva o método de inserção de registros para atualizar os dados inseridos:

Apague o registro de dentro do banco de dados:

Execute o programa novamente:

Ajuste os labels, acertando a propriedade ,�� e a propriedade 0�..��� para que os mesmo sejam

corretamente visualizados:

O resultado será:

Agora deveremos na próxima etapa desenvolver um formulário de cadastro de dados para nosso sistema.

INCLUSÃO DE REGISTROS NO BANCO DE DADOS

Crie um novo formulário chamado ��������������:

Sete as seguintes propriedades do formulário:

Ajuste também a propriedade ���������� para o centro da tela e o texto do formulário:

Desenhe o formulário a seguir:

Nome dos campos:

Agora vamos chamar o formulário. Para isso temos que passar o ���.�������� para o banco de dados

no formulário. Crie a seguinte propriedade em ��������������:

Em �������� apagar o código do botão “adicionar” e substituir pelo código a seguir:

Vamos criar o modelo aluno para que o mesmo seja usado entre os dois formulários. Se aluno contiver o

valor nulo, então estamos adicionando dados no banco de dados. Se contiver algum valor não nulo, então

estamos editando o campo. Crie a seguinte propriedade em ��������������:

Em �������� no botão “adicionar” acrescentar a seguinte linha:

Vamos criar o evento do botão �2����� em ��������������:

Gere o método “novo” e “editar”:

Codificaremos o método novo, jogando os campos do formulário para a estrutura de dados e adicionando

no banco de dados, logo após limparemos o ���.�������� e vamos mover o registro do banco de dados

para o último já que adicionamos sempre no final da tabela de dados.

Antes de executar o programa temos que resolver um problema, não está sendo usada numeração

automática, portanto devemos encontrar o maior código, somar um e em seguida atualizar o campo

�.�����. Usando a função ��3() na linguagem LINQ é possível realizar a consulta e retornar o valor

calculado, convertido em inteiro. Se o banco não tiver nenhum registro o valor retornado será um.

Em ������� acrescente o seguinte código:

Acrescente no botão gravar a chamada a função próximo código, retornando no identificador do aluno o

código calculado:

Agora precisamos resolver o código do curso, para isso precisamos montar no �������3 a lista de cursos

existentes. Crie a classe ������� em controle:

Codificar os seguintes dados:

O método acima irá preencher o �������3 com a lista de cursos da tabela selecionada. Crie o evento

4)%5 em #)$&6 %4)7849�) para chamar essa rotina:

Agora temos como preencher o campo de identificação do curso no botão gravar. Faça da seguinte

maneira:

Se executar o código como está na hora de gravar ocorrerá um erro, pois o nosso objeto tem o valor nulo,

mude o aluno para um objeto não nulo com a linha a seguir:

Para finalizar, acrescente a rotina do botão “gravar” o código parta fechar o formulário:

Cuidado! Você receberá um a mensagem de erro caso digite campos com tamanhos maiores que definidos

na tabela. Este problema irá ocorrer principalmente em CEP e Fone, caso você inclua os parentes e traços.

Antes de executar o programa verifique se o parâmetro para não incluir os literais da máscara encontra-se

selecionado, tanto para CEP quanto para o telefone:

Também verifique a propriedade ��3���ℎ de todas as caixas de texto para que o valor seja menor que

os valores definidos no campo ;%$<=%$ da tabela.

Exclusão de Registros

A exclusão é tecnicamente simples de ser realizada. Para isso codifique o evento click do botão excluir em

��������:

A exclusão está pronta, selecione-se o código, enviando para a classe o aluno então é excluído, sem usar

nenhuma instrução SQL.

Edição de Registros

Para editar os dados de um registro será necessário localizar o registro, colocar os dados em um objeto

aluno e em seguida enviar para o formulário. Começaremos codificando a rotina de pesquisa na classe

�������:

Codificar agora o botão de editar em ��������:

Gere o evento click deste botão. Nele faremos a pesquisa e em seguida abriremos o formulário com os

dados a serem preenchidos.

Em ��������������, no evento ���., iremos preencher os campos com os valores encontrados pela

pesquisa realizada.

Isto se baseia no principio que o botão de edição não envia o valor nulo para o formulário, isto permite

preencher os dados do formulário com os valores encontrados pela pesquisa do sistema.

Codifique agora o método editar que foi criado em ��������������:

Note que o método editar está em vermelho, pois ainda não foi criado em �������. Crie esse método em

������� e insira o seguinte código:

Pronto. A Rotina de edição no banco de dados encontra-se codificada. Programe apenas o botão cancelar

para fechar o formulário e limpar o objeto aluno.

O resultado será os dados preenchidos conforme o seguinte exemplo:

ROTINA DE PESQUISA

Vamos criar uma rotina de pesquisa para nosso formulário aluno. Para isso acrescente um botão de

pesquisa no formulário aluno:

Chame o botão de ��0�������. Acrescente o seguinte código ao botão: (não se preocupe com as

mensagens de erro, elas permanecerão até o formulário de pesquisa estiver criado).

Crie o formulário de pesquisa chamado ���������0������������:

Acrescente ao inicio do formulário de pesquisa (tecla F7 no formulário) o campo Id que retornará o registro

de aluno selecionado:

Desenhar um >3��3 e um ?��� que será usado para procurar e identificar o nome do aluno:

Chame os componentes de ��@���� e 3A��. Em seguida desenhe um grid para exibir os nomes

encontrados no banco de dados com as seguintes opções desmarcadas:

Renomeio o grid para “dg”:

Crie abaixo um �������3(. ��� ��-3��) contendo o nome do aluno selecionado (�������) e um

botão OK para confirmar a seleção (��/D)

Codificar o evento >3�ℎ���. do >3��3 3A�� para pesquisar um aluno e devolver a resposta no

datagrid:

Codificar o evento do .�����.��E para preencher o id e o ���� com o nome do aluno:

Na classe ������� codificaremos o método F 4�$%$, que efetivamente realiza a pesquisa na tabela de

alunos:

O resultado será:

Você pode modificar essa rotina para filtrar por mais itens além do nome. Modifique de acordo com as sua

necessidade.

ROTINA DE INSERÇÃO DE CURSOS

Vamos modificar nosso formulário aluno para que ele também permita o cadastro de novos cursos dentro

do projeto. Para garantir integridade não permitiremos exclusão de cursos que tenham alunos cadastrados

no sistema. Comece acrescentando um botão para adicionar e outro para remover cursos em

��������������, conforme a imagem a seguir:

Chame os botões de ���..����� e ���������. Começaremos com a rotina de adição de cursos. Para

isso vamos chamar um formulário que irá cadastrar efetivamente um novo curso na lista:

Crie o formulário #)$&6 %4)7G9$H) e desenhe com a seguinte forma:

Codifique o evento “clique” para o botão cancelar:

Codifique o evento “clique” para o botão gravar, onde criaremos uma variável do tipo curso e iremos

inserir os dados dentro da tabela curso, em caso de erro será exibida uma mensagem.

A rotina de inserir em ������� é a seguinte:

A rotina que gera o próximo código:

Desenvolver agora a rotina de exclusão, que será executada apenas se nenhum aluno estiver cadastrado

no curso.

Codificar o botão de exclusão do curso:

Exercício

1. Crie o botão editar o curso para alterar apenas a sua descrição.

MONTANDO SISTEMA DE CEP EM C#

Vamos importar a base de dados de CEP contida no arquivo CEP. Abra o WORKBENCK e acesse conexão

com o banco de dados:

Torne a base de dados escola o SCHEMA padrão:

As tabelas serão criadas neste banco de dados. Crie a seguinte estrutura de tabela:

CREATE TABLE IF NOT EXISTS `tend_bairro` ( `id_bairro` int(11) NOT NULL, `bairro` varchar(50) NOT NULL, `id_cidade` int(11) NOT NULL, PRIMARY KEY (`id_bairro`), KEY `FK_tend_bairro_1` (`id_cidade`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `tend_cidade` ( `id_cidade` int(11) NOT NULL, `cidade` varchar(100) NOT NULL, `uf` varchar(2) NOT NULL, PRIMARY KEY (`id_cidade`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `tend_endereco` ( `cep` varchar(10) NOT NULL DEFAULT '', `endereco` varchar(200) NOT NULL DEFAULT '', `id_cidade` int(11) NOT NULL, `id_bairro` int(11) DEFAULT NULL, PRIMARY KEY (`cep`), KEY `fk_end_cidade_end_endereco1` (`id_cidade`), KEY `FK_tend_endereco_2` (`id_bairro`), KEY `IN_CEP` (`cep`), KEY `IN_endereco` (`endereco`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `tend_bairro` ADD CONSTRAINT `FK_tend_bairro_1` FOREIGN KEY (`id_cidade`) REFERENCES `tend_cidade` (`id_cidade`) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE `tend_endereco` ADD CONSTRAINT `fk_end_cidade_end_endereco1` FOREIGN KEY (`id_cidade`) REFERENCES `tend_cidade` (`id_cidade`) ON DELETE CASCADE ON UPDATE NO ACTION, ADD CONSTRAINT `FK_tend_endereco_2` FOREIGN KEY (`id_bairro`) REFERENCES `tend_bairro` (`id_bairro`) ON DELETE NO ACTION ON UPDATE CASCADE; SET FOREIGN_KEY_CHECKS=1;

Execute o query:

Você terá a seguinte estrutura de tabelas:

Vamos importar para a estrutura de tabela os dados dos CEPS:

Selecione o seguinte arquivo que contém os CEPS:

Informe em seguida o formato de caracteres usado (UTF-8 ou LATIN1 caso seja perguntado) e aguarde que

toda a tabela de CEP seja copiada para o banco de dados.

Este processo é demorado, são 72 MB de dados em CEP a serem copiados para o banco de dados, portanto

espere a conclusão do mesmo e faça backup da base dados para não ter que repetir o processo sempre

que necessário.

Se por acaso o Windows travar ao fazer a importação por linha de comando, vá onde se encontra o arquivo

SQL e digite o seguinte: (Não se esqueça de limpar as tabelas para não ocorrer à mensagem de índice

duplicado) .

E aguarde, pois o processo é demorado. Vamos agora atualizar o nosso projeto com os dados da tabela,

recriando o arquivo ��������. .�3: Apague o modelo antigo:

Apague também o arquivo ���. ���,�� ���I���. ���,��:

Reimporte o modelo conforme já explicado nesta apostila. Você terá três novas tabelas mapeadas:

Vamos criar uma classe ���� para acessar as tabelas de Cep:

Vamos codificar um método que procura o Código do CEP e devolve os dados do endereço:

Nota: Acima temos a correção do problema ��.J?��.���, em que entidades agregadas não são

carregadas automaticamente quando passamos a mesmas por valor ou referencia em uma função. Para

resolver este problema podemos utilizar o método Include para indicar quais propriedades das tabelas

agregadas podem ser carregadas ou não na tabela em que você está acessando.

Agora passemos a codificação do botão K��G�L_G4 <* em #)$&6 %4)7849�) que será responsável por

chamar a pesquisa de CEP em nossa base de dados:

Nota: a palavra $'F informa uma passagem por referencia explicita, ou seja, o objeto passado retorna com

os dados da pesquisa na própria variável, impedindo a sua remoção pelo coletor de lixo.

O resultado visual do projeto será como abaixo, pressione o botão procurar com o CEP preenchido e os

dados de endereço, bairro, cidade e Estado serão automaticamente preenchidos:

RELATÓRIOS EM C# Com EF

Crie um formulário chamado F)$&M'4%�)$ ) em �����:

Torne o formulário uma caixa de diálogo definindo as propriedades ��3���N.��3 e �����N��3 para

false e deixe com borda fixa, defina a posição inicial para o centro da janela e a caixa de título para

relatório ( deixe o comprimento do formulário maior que sua altura:

Insira no formulário o componente @���O�E�:

Perceba que o mesmo irá criar a estrutura de exibição de relatório:

Necessitamos agora criar um arquivo padrão rdlc para ser exibido pelo nosso formulário. Clique em

adicionar novo item para a pasta controle:

Procure por um objeto de relatório e o chame de �.�����:

Temos agora a seguinte tela:

Para desenhar nosso relatório precisamos mapear os campos da nossa tabela a serem usados no relatório

definindo um Dataset para isso, portanto clique em Dataset com o botão direito do mouse e escolha

adicionar Dataset:

Pressione o botão new para localizar nossa fonte de dados:

Selecione a opção object, pois se trata de um objeto de classe no repositório modelo e pressione �3:

Escolha a base de dados aluno em ��������. ��.�� e em seguida escolha finalizar:

Você terá agora a seguinte estrutura:

Mude apenas o nome do Dataset para 5H849�) visando facilitar a codificação e pressione /D

Termos agora os campos para utilizar em nosso relatório:

Vamos começar criando um cabeçalho para o relatório, com o botão direito do mouse sobre o relatório e

insira um cabeçalho:

É criada uma área para o cabeçalho:

Com o botão direito insira uma caixa de texto e

escreva nela “Etec Dr Demétrio Azevedo Junior”, de um enter e digite relatório de alunos cadastrados.

Selecione o texto e ajuste o tamanho da caixa e o tamanho, fonte e estilo, além do alinhamento para que

fique conforme o exemplo abaixo:

Vamos exibir os dados da tabela no corpo do relatório. A forma mais simples de executar é inserindo um

componente do tipo tabular linha e coluna chamada �%K4':

Você terá a seguinte estrutura:

Posicione a mesma para que ocupe toda a linha do relatório:, redimensionando-a

Arraste para data os campos que deseja que apareçam no relatório. Vamos começar com o nome:

Você pode verificar que ele preenche sozinho o cabeçalho da coluna com o nome do campo:

Edite esse cabeçalho e escreva a palavra aluno no lugar de nome:

Arraste agora os campos sala e cidade e aproveite para redimensionar deixando as colunas um pouco

menor que a coluna nome:

Faça ajuste de fonte, cor, borda e outros elementos visuais:

Vamos chamar agora este relatório para que seja exibido em nosso @���O�E�. Comece criando um

botão para chamar o nosso relatório em ��������:

Codifique o botão:

Abra o ���@������ e pressione F7 para ver o código fonte, acrescente a seguinte ����� ao projeto:

Crie as seguintes variáveis:

Vamos codificar o evento 4)%5 para chamar o nosso relatório de acordo com o tipo de relatório que eu

desejar imprimir:

Em ������� codificar a rotina de impressão, que será responsável por passar os dados do banco de dados

usando EF para o nosso relatório usando um Dataset:

Agora podemos executar o nosso relatório, que apresentará o seguinte resultado:

Vamos agora resolver um problema, nosso projeto precisa colocar também o nome do curso que o aluno

frequenta, para isso vamos acrescentar mais uma coluna em nosso ��� a esquerda da coluna cidade:

Arraste o rótulo curso do Dataset para a coluna criada:

Ajuste as posições e tamanhos. Volte para a classe ������� e codifique a coluna curso:

O resultado será:

ACRESCENTANDO UM TOTALIZADOR AO RELATÓRIO

Acrescente aos detalhes uma nova linha para exibir a totalização:

Vamos totalizar o número de alunos cadastrados. Acrescente um título a coluna abaixo do aluno e em

seguida crie um placeholder na coluna a direita:

Na expressão monte uma contagem de nome de alunos:

Defina o campo a ser totalizado:

Pressione OK e teste a execução do relatório novamente: