Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Salve o arquivo nos Meus Documentos. Agora vamos descompactar o arquivo para usarmos o arquivo MySql.Data.dll que est dentro da pasta bin. Este o arquivo responsvel em estabelecer a comunicao entre a programao em C# com o banco de dados em MySQL. Portanto deixe este arquivo sempre dentre da pasta do projeto.
2 - CRIAR O BANCO DE DADOS E SUAS TABELAS NO MYSQL Abra o prompt de Comando e digite:
3 - CRIAR UM PROGRAMA NO C# Agora iremos criar um projeto e adicionaremos a referncia da DLL usando o arquivo MySql.Data.dll. Inicialize o VisualStudio 2005 e siga os passos: 1. Passo: Criar um projeto
Escolha um diretrio
Clique OK
2. Passo: Adicionar a Referncia Abra o Solution Explorer
6 Acessando BD com C# usando o MySQL 3. Passo: Criar uma classe para fazer a conexo com o banco de dados (MySQL). A idia de criar uma classe para reutilizarmos o cdigo de conexo e acesso ao banco de dados e suas tabelas, isto , ao invs de copiarmos e colarmos os cdigos de FORM em FORM. Para criarmos uma classe siga os passos abaixo: 1. Passo:
A figura abaixo o cdigo da classe criada, lembrem-se classes no possuem FORM, elas so formadas somente por cdigo.
Observe que esta linha no ficou com o tipo de varivel DataTable em verde, isto significa que est faltando o uso de sua DLL
8 Acessando BD com C# usando o MySQL Antes de arrumarmos o erro do uso da DLL, vamos entender para que serve cada varivel. A varivel conectar ir armazenar todo o caminho da conexo at o banco de dados. Imagine esta varivel como uma ponte que liga o C# ao MySQL, sem esta ponte no temos caminho para trafegar os comandos em SQL. A varivel comando_sql ir armazenar os comandos da linguagem SQL (insert, delete, select, delete), para serem executados pela varivel executar_comando. Imagine este comando como sendo o prompt de comando com o MySQL aberto. A varivel tabela_memoria ir armazenar o resultado da execuo do comando SQL. Estas 4 variveis sempre iram trabalhar em conjunto 4. Passo: Corrigir o erro da DLL do DataTable
5. Passo: Criar os campos Encapsulados das variveis. . Esta palavra significa que Observe que usamos antes de cada varivel a palavra as variveis no estaro disponveis em outro lugar, a no ser dentro deste cdigo. Ento o que iremos fazer, pois precisarei usar este cdigo em outros FORMS. A soluo criar os campos encapsulados, que iram permitir o uso destas variveis em qualquer outro FORM dentro do projeto. Estes campos encapsulados so criados automaticamente pelo Visual Studio. s seguir os passos abaixo para cada varivel.
Selecione cada uma das outras 3 variveis e refaa os passos para ter um cdigo semelhante ao cdigo abaixo:
11 Acessando BD com C# usando o MySQL 6. Passo: Criar a ponte de conexo ao BD do Mysql Observe o final do seu cdigo para adicionar o mtodo no lugar correto.
public String criar_Conexao() { // verificando se existe uma conexo, fecha esta conexo if (conectar != null) { conectar.Close(); } // serve para configurar os parametros do banco de dados string configuracao = string.Format("server={0};user id={1}; password={2}; database=mysql; pooling=false","", "", ""); // tenta estabelecer conectar try { conectar = new MySqlConnection(configuracao); conectar.Open(); }// caso no consiga exibe erro de conexo catch (MySqlException erro) { return ("Erro ao conectar " + erro); } // criar um banco em branco na memria MySqlDataReader banco = null; // fazer uso do banco escolhido MySqlCommand usar = new MySqlCommand("use escola", conectar); // tenta criar o banco try { banco = usar.ExecuteReader(); }// caso ocorra erro catch (MySqlException erro) { return ("Failed to populate database list: " + erro); }// no fim fecha finally { if (banco != null) { banco.Close(); } } return ("Conexo OK!!!"); }
12 Acessando BD com C# usando o MySQL 7. Passo: Criar o Mtodo acessar tabelas. Desa o cdigo e debaixo para cima observe novamente os trs ltimos fecha chaves ( ). Entre o segundo e o terceiro o lugar correto para escrevermos este cdigo.
public void carregar_tabela(String comando) { tabela_memoria = new DataTable(); comando_sql = new MySqlDataAdapter(comando, conectar); executar_comando = new MySqlCommandBuilder(comando_sql); comando_sql.Fill(tabela_memoria); }
Altere o name dos objetos para: LABEL1: lblNome e TEXTBOX1: txtNome LABEL2: lblIdade e TEXTBOX2: txtIdade LABEL3: lblTurma e TEXTBOX3: txtTurma BUTTON1: btnCadastrar DATAGRIDVIEW1: dtgrdExibir FORM1: frmTelaPrincipal
5. PASSO: Vamos comear nossa programao de acesso a tabela 1. Passo: Iremos criar uma varivel global, que na verdade um objeto, cpia da classe Conexo. atravs desta varivel que iremos fazer todo o acesso as tabelas do banco de dados.
Cadastrando Dados
Reviso
Como foi visto na aula anterior para cadastrar dados em tabelas no MySql preciso saber o comando em SQL (INSERT) e escrever o comando, lembrando que:
Tambm vimos que para cadastrar campos AUTOINCREMENTO necessrio usar as aspas simples com nenhum valor dentro, isto , vazia, conforme o exemplo abaixo:
create table alunos ( cod_aluno int auto_increment, nome varchar(40), idade int,
primary key(cod_aluno) );
casas decimais devem ser separadas por ponto (.). Ento teremos que usar um comando especfico para fazer esta converso em cada campo que houver a necessidade. Este comando o Replace(valor original,valor para substituio) e pode ser usado em campo valor String, conforme o exemplo abaixo:
create table funcionario ( cod_func int auto_increment, nome varchar(40), salario float,
primary key(cod_func) );
Verifica se os campos NOT NULL (da tabela funcionario) no foram preenchidos, iguais de vazio (== ). Observe que usamos o OR (||), pois o usurio pode ter preenchido um dos dois campos ou nenhum dos dois. Caso o if seja verdadeiro uma mensagem na tela ir aparecer, informando o usurio que os campos devem ser preenchidos, caso contrrio o cadastro ser efetuado.
Para exemplificar e desmonstrar o cadastro dos campos NOT NULL e FLOAT iremos trabalhar com o projeto disponvel no NetStudent com o nome Escola.
Pesquisando Dados
Usando o projeto Escola vamos codificar o boto Pesquisar.
Lembre-se quando efetuamos uma Pesquisa precisamos de um valor de busca, por exemplo Nome do Funcionrio, e aps encontrar o valor procurado, na tabela, devemos exibir todos os outros campos da tabela, por este motivo precisamos de LABELS para exibir o resultado.
LABELS para exibir o resultado da busca Clique 2x no boto Pesquisar e escreva o cdigo abaixo:
private void btnPesquisar_Click(object sender, EventArgs e) { con1.carregar_tabela("select * from funcionario where nome='"+txtNomePesq.Text+"'"); if (con1.Tabela_memoria.Rows.Count == 0) { MessageBox.Show("Funcionario no encontrado!!!!"); } else { lblRespNome.Text = con1.Tabela_memoria.Rows[0]["nome"].ToString(); lblRespSalario.Text = con1.Tabela_memoria.Rows[0]["salario"].ToString(); } }
18 Acessando BD com C# usando o MySQL Observe como fica a varivel Tabela_memoria aps uma consulta que no foram encontrados resultados, isto , o valor informado para a busca no existe na tabela.
Sem nenhuma informao, verificando ZERO linha, isto , quantidade de linha igual a ZERO.
INFORMANDO QUE O VALOR INFORMADO NO EXISTE NA TABELA Observe agora como fica a varivel Tabela_memoria aps uma consulta aonde encontrado APENAS UM resultado, isto , o valor informado para a busca existe na tabela.
Com uma informao, verificando UMA linha, isto , quantidade de linha diferente de ZERO.
PARA EXIBIR USAMOS O VALOR ENCONTRADO NA LINHA ZERO SEU NOME NA TABELA , FORMANDO O COMANDO
EO
A CONVERSO PARA STRING OBRIGATRIA PARA PODERMOS EXIBIR OS VALORES ENCONTRADOS EM LABELS OU TEXTBOXS. Observe agora como fica a varivel Tabela_memoria aps uma consulta aonde so encontrados VRIOS resultados, isto , o valor informado para a busca existe na tabela.
Com vrias informaes, verificamos VRIAS linhas, isto , quantidade de linha diferente de ZERO. Mas temos um grande problema, como exibir todos os valores se SEMPRE usamos o comando E AGORA? .
SOLUO PARA O PROBLEMA DE VRIOS REGISTROS Exibir e o resultado da busca em LABELS e em um DATAGRIDVIEW, como fazemos com o cadastro. Observe o cdigo abaixo:
Excluindo Dados
Quando analisamos o processo de excluso de registros observamos que necessrio fazer uma pesquisa antes de excluir o registro para verificarmos se a informao encontrada de fato a que desejamos excluir. Altere o FORM, adicionando o boto Excluir, conforme segue abaixo:
Lembre-se que o boto excluir deve se acionado somente depois que pesquisamos uma informao.
Clique 2x no boto Excluir e escreva o cdigo abaixo:
private void btnExcluir_Click(object sender, EventArgs e) { DialogResult resp; resp = MessageBox.Show("Deseja excluir este registro?","Excluir!!!",MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (resp == DialogResult.Yes) { con1.carregar_tabela("delete from funcionario where nome='"+txtNomePesq.Text+"'"); MessageBox.Show("Funcionrio excludo com sucesso!!!!"); } else { MessageBox.Show("Excluso cancelada!!!!"); } }
O processo de excluso dever seguir os passos: 1. Digite a informao desejada e click no boto Pesquisar, todos os dados referente a esta informao sero exibidos no labels da pesquisa. 2. Click no boto Excluir, para evitar o erro de excluirmos informaes que no desejamos, adicionamos a caixa de mensagem abaixo:
3. A resposta do usurio (click no boto) ser armazenado na variavel resp. Se a resposta for SIM a informao ser excluda da tabela e caso seja NO a informao no ser excluda.
Alterando Dados
Idem ao processo de excluso a alterao de dados tambm precisa da pesquisa. Portanto iremos usar o mesmo FORM, mas no podemos esquecer que para alterar informaes precisamos digitar e para isto teremos que usar TEXTBOX para exibir o resultado da Pesquisa ao invs de LABELS. Primeiro iremos alterar o FORM, trocando os LABELS por TEXTBOXS e adicionando o boto Alterar, conforme segue abaixo:
Agora iremos alterar o cdigo do boto Pesquisar que exibia as informaes em LABELS e agora dever exibir as informaes em TEXTBOXS.
24 Acessando BD com C# usando o MySQL Portanto iremos fazer o cdigo do boto Alterar. Clique 2x no boto Alterar e escreva o cdigo abaixo:
private void btnAlterar_Click(object sender, EventArgs e) { con1.carregar_tabela("update funcionario set nome='"+txtNovoNome.Text+"', salario="+txtNovoSalario.Text+" where nome='"+txtNomePesq.Text+"'"); MessageBox.Show("Funcionrio alterado com sucesso!!!!"); }
Lembre-se que o boto alterar deve se acionado somente depois que pesquisamos uma informao.
Observando a FORM e o banco de dados verificamos que os DADOS DO PRODUTO esto cadastrados na tabela PRODUTO e os DADOS DO VENDEDOR esto cadastrados na tabela VENDEDOR, caracterizando um FK Tambm verificamos que o VALOR A RECEBER do vendedor ser calculado automaticamente atravs do TOTAL DA VENDA, que tambm ser calculado automaticamente atravs da QUANTIDADE COMPRADA * PREO UNITRIO. Iremos comear carregando os COMBOBOXS com as respectivas tabelas. 1 - Acione o evento LOAD do FORM e escreva o cdigo abaixo:
private void Form1_Load(object sender, EventArgs e) { MessageBox.Show(con1.criar_Conexao()); con1.carregarTabela("select * from produto"); cmbProduto.DataSource = con1.Tabela_memoria; cmbProduto.DisplayMember = "descricao"; cmbProduto.ValueMember = "cod_produto"; con1.carregarTabela("select * from vendedor"); cmbVendedor.DataSource = con1.Tabela_memoria; cmbVendedor.DisplayMember = "nome"; cmbVendedor.ValueMember = "cod_vendedor"; }
26 Acessando BD com C# usando o MySQL Observe que a linha , a que cria a conexo com o banco, deve ser sempre a primeira linha do evento LOAD do FORM, porque sem conexo ao banco no conseguimos fazer nada com as tabelas. Agora vamos entender como funciona o preenchimento dos COMBOBOXS com os valores que esto nas tabelas. 1. Devemos fazer uma busca de todas as informaes da tabela que desejamos exibir no COMBOBOX, isto feito com a linha
2. Depois de termos todos os dados carregados iremos atribuir estes valores ao COMBOBOX, isto feito com a linha
3. Agora temos um COMBOBOX com todas as informaes da TABELA, portanto devemos escolher qual destes campos (informaes) ser exibido ao usurio. Lembre-se que neste momento a informao deve ser o nome do CAMPO da TABELA. Isto feita com a linha 4. Como o COMBOBOX est representando um FK, devemos informar qual ser a informao capturado com a seleo do usurio. Neste caso iremos exibir o DESCRICAO e vamos capturar com a seleo do usurio a COD_PRODUTO. Isto feito com a linha
2 -
Com os COMBOBOX carregados, iremos preencher os campos referentes com a seleo do usurio. Para isto devemos acionar o evento
automaticamente
SELECTEDINDEXCHANGED dos COMBOBOXS. Para isto click 2x no COMBOBOX do PRODUTO e escreva o cdigo abaixo:
private void cmbProduto_SelectedIndexChanged(object sender, EventArgs e) { try { con1.carregarTabela("select * from produto where descricao ='"+cmbProduto.Text+"'"); txtPrecoUnit.Text = con1.Tabela_memoria.Rows[0]["preco"].ToString(); txtQtdEstoque.Text = con1.Tabela_memoria.Rows[0]["qtd_estoque"].ToString(); } catch { } }
27 Acessando BD com C# usando o MySQL Agora click 2x no COMBOBOX do VENDEDOR e escreva o cdigo abaixo:
private void cmbVendedor_SelectedIndexChanged(object sender, EventArgs e) { try { con1.carregarTabela("select * from vendedor where nome ='" + cmbVendedor.Text + "'"); txtComissao.Text = con1.Tabela_memoria.Rows[0]["comissao"].ToString(); } catch { } }
Os cdigo acima tem a funcionalidade de ao selecionar um item no COMBOBOX o outros valores armazenados na tabela sejam exibidos automaticamente. Lembre-se no obrigatrio exibir todos os valores da tabela, exibimos aquilo que desejamos, isto , aquilo que necessrio para que o usurio entenda o software.
3 - Agora iremos calcular o total de venda, para isto acione o evento TEXTCHANGED do txtQtdComprada, clicando 2x no txtQtdComprada, e escreva o cdigo abaixo:
private void txtQtdComprada_TextChanged(object sender, EventArgs e) { if (txtQtdComprada.Text != "") { qtd_comprada = Convert.ToInt32(txtQtdComprada.Text); qtd_estoque = Convert.ToInt32(txtQtdEstoque.Text); preco = Convert.ToInt32(txtPrecoUnit.Text); if (qtd_comprada <= qtd_estoque) { total_venda = preco * qtd_comprada; txtTotalVenda.Text = total_venda.ToString(); } else { MessageBox.Show("Quantidade Insuficiente no Estoque!!!"); } } }
As variveis usadas neste cdigo foram declaradas como variveis globais conforme a figura abaixo:
28 Acessando BD com C# usando o MySQL 4 Agora iremos calcular a comisso do vendedor. Iremos fazer este calculo em conjunto com o total da venda, pois para a comisso do vendedor precisamos do total da venda e ela tambm deve ser calculada automaticamente. Clique 2x no txtQtdComprada e altere o cdigo para:
5 Finalmente iremos fazer o boto cadastrar. No cadastrar iremos cadastrar os dados da tabela VENDAS e decrementarmos a qtd_estoque da tabela PRODUTO. Como a tabela VENDAS tem dois FK, os valores cadastrados nestes campos deve ser um valor INTEIRO e no um TEXTO como exibido no COMBOBOX, portanto quando tivermos FK em tabelas e usarmos . Clique 2x no btnCadastrar e escreva o cdigo abaixo: o COMBOBOX iremos usar o seguinte comando
Precisamos usar a converso de datas pois o MYSQL usa o padro aaaa/mm/dd, sendo aaaa para o ano com 4 algarismos, mm para o ms com 2 algarismos e dd para o dia com 2 algarismos, e ns usamos o padro inverso dd/mm/aaaa. O cdigo abaixo o responsvel em fazer esta converso.
DateTime data_venda; data_venda = Convert.ToDateTime(mskDataCompra.Text); String data; data = data_venda.ToString("yyyy/MM/dd");