Download - c Sharp Com Mysql

Transcript
  • 1 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    ACESSANDO BD COM C# USANDO O MYSQL

    O Visual Studio pode fazer conexo com muitos gerenciadores de Banco de Dados. Por

    exemplo: Access, SQLServer, MySQL, Oracle, SysBase, entre outros. No nosso caso iremos trabalhar com o MySQl, gerenciador de Banco de Dados gratuito que est disponvel no site www.mysql.com. Para criarmos um programa que armazene, pesquise, exclua e altere informaes em um banco de dados do tipo MySQL, devemos seguir os seguintes passos:

    1. Pegar a DLL de conexo do MySQL 2. Criar o banco de dados com suas tabelas no MySQL 3. Criar o programa no C#

    1 - PEGAR A DLL DE CONEXO DO MYSQL

    Para usarmos o Gerenciador de Banco de Dados MySQL, vamos precisar de uma biblioteca

    para estabelecer a comunicao. Esta biblioteca tambm disponvel no site www.mysql.com.

  • 2 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

  • 3 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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:

  • 4 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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

    Clique no Menu File

    Clique no SubItem New e depois clique em Project

  • 5 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    2. Passo: Adicionar a Referncia

    Troque o nome para Cadastrar

    Escolha WINDOWSAPPLICATION

    Escolha um diretrio

    Clique OK

    Abra o Solution Explorer

    Na aba Browse localize o arquivo MySql.Data.dll

  • 6 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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.

  • 7 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    2. Passo: Fazer uso da DLL inserida nas Referencias.

    3. Passo: Criar as variveis abaixo:

    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

    Profa. Ana Paula Citro Fujarra Rodrigues

    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. Observe que usamos antes de cada varivel a palavra . Esta palavra significa que 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.

  • 9 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

  • 10 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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

    Profa. Ana Paula Citro Fujarra Rodrigues

    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

    Profa. Ana Paula Citro Fujarra Rodrigues

    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); } 4. Passo: Agora que terminamos nossa classe vamos construir o FORM

    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.

    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

  • 13 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    2. Passo: Ativar o evento LOAD do frmTelaPrincipal (FORM)

    3. Passo: Ativar o evento CLICK do btnCadastrar private void btnCadastrar_Click(object sender, EventArgs e) { con1.carregar_tabela("insert into alunos values('" + txtNome.Text + "'," + txtIdade.Text + ",'" + txtTurma.Text + "')"); con1.carregar_tabela("select * from alunos"); dtgrdExibir.DataSource = con1.Tabela_memoria; }

  • 14 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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:

    Os campos VARCHAR precisam de aspas simples () e os campos INT no precisam destas aspas simples, conforme o exemplo:

    create table alunos ( nome varchar(40), idade int );

    insert into alunos values (+txtNome.Text+,+txtIdade.Text+)

    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) );

    insert into alunos values (,+txtNome.Text+,+txtIdade.Text+)

  • 15 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    Cadastrar Campos FLOAT ou DECIMAL

    Para cadastrar campos com casas decimais teremos um problema. Os valores com casas

    decimais so separados por vrgula (,) para os softwares padro Windows e para o MySQL as

    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) );

    insert into funcionario values (,+txtNome.Text+,+txtSalario.Text.Replace(,,.)+)

  • 16 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    Cadastrar Campos NOT NULL

    Para os campos NOT NULL no iremos usar comando SQL, mas sim lgica de

    programao, isto , antes de efetuarmos a linha de comando que faz o insert no banco iremos

    verificar se os TEXTBOX dos campos NOT NULL foram preenchidos pelo usurio, para isso

    iremos usar o comando IF/ELSE.

    Observe o exemplo abaixo:

    Para exemplificar e desmonstrar o cadastro dos campos NOT NULL e FLOAT iremos

    trabalhar com o projeto disponvel no NetStudent com o nome Escola.

    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.

  • 17 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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.

    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(); } }

    VALOR DE BUSCA

    LABELS para exibir o resultado da busca

    Boto para executar o comando SELECT (busca)

  • 18 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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.

    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.

    Sem nenhuma informao, verificando ZERO linha, isto , quantidade de linha igual a ZERO.

    Com uma informao, verificando UMA linha, isto , quantidade de linha diferente de ZERO.

    PORTANTO O COMANDO QUE SER EXECUTADO O IF ABAIXO

    INFORMANDO QUE O VALOR INFORMADO NO EXISTE NA TABELA

    PORTANTO O COMANDO QUE SER EXECUTADO O ELSE ABAIXO

    EXIBINDO O VALOR ENCONTRADO NOS LABELS.

  • 19 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    ENTENDA O COMANDO :

    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.

    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:

    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?

    PARA EXIBIR USAMOS O VALOR ENCONTRADO NA LINHA ZERO E O SEU NOME NA TABELA , FORMANDO O COMANDO A CONVERSO PARA STRING OBRIGATRIA PARA PODERMOS EXIBIR OS VALORES ENCONTRADOS EM LABELS OU TEXTBOXS.

  • 20 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    Observe que usamos o DATAGRIDVIEW do cadastro, somente para exemplificar a

    soluo.

  • 21 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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:

  • 22 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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: resp = MessageBox.Show("Deseja excluir este registro?","Excluir!!!",MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    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.

  • 23 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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

    Profa. Ana Paula Citro Fujarra Rodrigues

    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.

  • 25 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    Trabalhando com Foreign Key

    Usando o projeto Exemplo 4TINA para exemplificarmos a processo de cadastro e

    pesquisa de FK (Foreign Key) nas tabelas.

    O FORM principal tem o layout abaixo:

    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

    Profa. Ana Paula Citro Fujarra Rodrigues

    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

    automaticamente com a seleo do usurio. Para isto devemos acionar o evento

    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

    Profa. Ana Paula Citro Fujarra Rodrigues

    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

  • 28 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    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 o COMBOBOX iremos usar o seguinte comando

    .

    Clique 2x no btnCadastrar e escreva o cdigo abaixo:

  • 29 Acessando BD com C#

    usando o MySQL

    Profa. Ana Paula Citro Fujarra Rodrigues

    private void btnCadastrar_Click(object sender, EventArgs e) { DateTime data_venda; data_venda = Convert.ToDateTime(mskDataCompra.Text); String data; data = data_venda.ToString("yyyy/MM/dd"); if (cmbProduto.Text == "" || cmbVendedor.Text == "" || txtNomeCliente.Text == "" || mskDataCompra.Text == " / /") { MessageBox.Show("Preencha todos os campos!!"); } else { con1.carregarTabela("insert into vendas values('','" + txtNomeCliente.Text + "'," + cmbProduto.SelectedValue + "," + cmbVendedor.SelectedValue+ "," + txtTotalVenda.Text.Replace(',','.') + ",'"+data+"')"); con1.carregarTabela("update produto set qtd_estoque = qtd_estoque -"+txtQtdComprada.Text+" where descricao='"+cmbProduto.Text+"'"); MessageBox.Show("Cadastro efetuado com sucesso!"); } }

    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");


Top Related