6 Acessos a banco de dados

Documentos relacionados
using System; using System.Collections.Generic; using System.Text; namespace Estudo { public class PessoaJuridica : Pessoa { private string cnpj;

ACESSO AO BANCO DE DADOS PARTE 2 ALTERAÇÃO, EXCLUSÃO E INCLUSÃO DE REGISTROS

05 Como utilizar POO no ambiente gráfico do C#?

Material II-Bimestre Introdução e conceitos fundamentais de aplicações para manipulação e Acesso a Banco de Dados em C#

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

Java - Conexão ao Banco de Dados usando JDBC

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Para criarmos um banco de dados no MySql, utilizamos à instrução:

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Flávio Dantas

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

TRABALHO FINAL 20 Pontos

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

using System; using System.Collections.Generic; using System.Linq; using System.Text;

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC


Banco de Dados I Introdução SQL

PRDS C#.Net Alexandre L. Silva

Manipulação de Dados com SQL

Tutorial C# - ADO.NET

Conexão com Banco de Dados, Inserção, exclusão e atualização de registros

Proposta de calendário - Comissão Permanente de Ensino

Sistema de Gestão de Recursos Humanos

Programação Orientada a Objetos II

ESTRUTURA DE DADOS LISTAS LINEARES

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real

MANUAL DE PUBLICAÇÃO NO PORTAL CAMPUS MATÃO

Conexão com Banco de Dados

Técni n c i as e L i L n i g n u g age g ns n p ara r Ba B nc n o d e D ados I ACCESS

Modificadores de Acesso e Atributos de Classe

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

Aula 6 POO 1 Construtores. Profa. Elaine Faria UFU

Shop Notas de implementação. [Exercício da Disciplina de ADAV]

Android e Bancos de Dados

Exercícios de fixação: Listas

MYSQL - PRIMEIROS COMANDOS CRIAÇÃCO DO BD E DAS TABELAS, INSERÇÃO E CONSULTA DE REGISTROS. create database [if not exists] <nome>

Aprender a utilizar o aplicativo Gnuplot para fazer gráficos

BANCO DE DADOS GERENCIAL 1 A U L A 2

ADO1. Visual Studio 2008 New Web Site: ADO1 em C:\Utilizadors\Fernando\ \ARQSI\TP6

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

MIRTH CRIANDO MENSAGENS HL7 A PARTIR DE UMA BASE DE DADOS

A linguagem SQL

Construtores e Especificadores de Acesso

DATA ACCESS OBJECT (DAO)

MOODLE MANUAL DE UTILIZAÇÃO - ALUNO. Elaborado por: Tecnologia da Informação 2019/1 Versão 1.0

Introdução. Extends e Super. Exercício Prático 5 Herança. Nome:

Associação 1:1. Baseado no Diagrama de Classe a seguir, iremos criar as classes de Modelagem que compõem a Associação de Piloto com Carro.

Unidade 12: Programação de Banco de Dados com Java Prof. Daniel Caetano


Super Business. Guia Rápido - Condicional & Devolução SuperSys Tecnologia

E-Fácil Passo a passo

Aula 08 Encapsulamento. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Vamos falar de Hibernate?

Programação Estruturada e Orientada a Objetos. Estruturas Aninhadas

Introdução a classes e objetos. Copyright 2006 by Pearson Education

Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Lista de exercícios I - RESPOSTAS Servlets e banco de dados

JAVA TÓPICOS ESPECIAIS DE PROGRAMACAO ORIENTADA A OBJETOS

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

Construtores. Introdução

MANUAL PRÁTICO DE INSERÇÃO PROJETO DE MONITORIA ACADÊMICA

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Aula 5 Instruções Simples Cleverton Hentz

Tutorial 133 DUO Criação de telas e utilização do teclado

Introdução em Banco de Dados

Vejamos agora as ferramentas mais utilizadas para criação de imagens:

Desenvolvimento de Aplicações para Internet Aula 6

Instalação Serviço de Acompanhamento de Projeto (PCSIS007) Sistema de Gestão da Qualidade

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

Como criar um banco de dados usando o mysql

Resumo do Módulo 2 Access

DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 4 PROF. EMILIO PARMEGIANI

1. Exemplo de uso do PROCV em planilha de Controle de Funcionários

CETEC Centro Paula Souza

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Tutorial SQL Server 2014 Express

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Leitura Segura de Strings

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Para o carregamento das DropDownList usar métodos:

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Tutorial para uso da área do professor

Gerabyte AFV (Automação de Força de Venda) Manual do Aplicativo

Triggers(Gatilhos) Tiago Alves de Oliveira

Fundamentos de Banco de Dados Postgre com Sql

Começando com o AWS IoT

Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 12 Out/2016.

Centro de Suporte. (Sistema Android) RCAMail Manual de Utilização Página 1

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Orientação a Objetos - Herança

Modulo 12: alocação dinâmica de memória

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Desenvolvimento Web II

Transcrição:

6 Acessos a banco de dados Vamos agora ver como podemos utilizar objetos trabalhando em conjunto com banco de dados. Podemos utilizar qualquer banco de dados. Vamos utilizar, por praticidade, um bando de dados criado no MSAccess. Utilizaremos o ADO.Net (Active Data Object para.net), que permite, através de uma string de conexão, utilizar uma grande variedade de SGDBs, por exemplo Para acessar Oracle "Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=Yes" Para acessar MSAccess(até 2007) "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\LocalAccess40.mdb" Para acessar MSAccess(até 2013) Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\LocalAccess40.accdb" Para acessar MSSQLServer "Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI" Antes de iniciarmos, então, precisamos invocar o OleDB para podermos realizar os acessos ao Banco de Dados. Então, nas chamadas de bibliotecas, iremos adicionar: using System.Data.OleDb; Será necessário termos um banco de dados criado no MsAccess. Então, vamos criar um novo banco de dados e inserir os seguintes campos (no MsAccess): A tabela chama Clientes. O Banco de dados (arquivo) foi criado como Teste.MDB e os campos como descritos acima. Vamos inserir alguns registros para podermos utilizar nos exemplos iniciais:

Com o arquivo criado, é necessário colocarmos este arquivo em uma pasta conhecida. Para esta aula, foi criada uma pasta chamada c:\sergio e colocado o arquivo dentro dela. Você pode criar com os nomes que desejar, bastando depois adequar estes nome no código mostrado como exemplo. Então vamos ao que interessa: Para podermos chamar os métodos de acesso e manipulação ao banco de dados, inicialmente iremos criar uma classe estática: public static class AcessoAoAccess Esta classe conterá as instruções de Acesso ao nosso banco de dados Access e, por ser uma classe estática, não precisa ser instanciada por um objeto para podermos acessar seus métodos. Em seguida, iremos criar um método dentro desta classe estática para realizar a conexão com o banco sempre que um outro método precisar acessar o banco: public static OleDbConnection AbrirConexao() return new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sergio\teste.mdb"); Este método retorna um objeto do tipo OleDbConnection, que será uma conexão aberta com o banco de dados destacado no fim da instrução. Neste destaque, deve-se colocar a pasta e o nome do banco de dados caso você tenha alterado algo. Para podemos testar se tudo está correto na conexão, vamos criar um método para mostrar os dados que inserimos manualmente no banco no início da aula. public static void Mostrar() OleDbConnection aconnection = AbrirConexao(); OleDbCommand acommand = new OleDbCommand("select * from Clientes", aconnection); //tentativa de conexão com o banco. Se der certo continua, qualquer erro vai para o catch aconnection.open(); //cria o objeto datareader para fazer a conexao com a tabela OleDbDataReader areader = acommand.executereader(); //Faz a interação com o banco de dados lendo os dados da tabela Console.WriteLine("Os valores retornados da tabela são : "); Console.WriteLine("Id\tNome\t\t\tE-mail"); while(areader.read()) //faz um While para ler, uma a uma, as linhas que retornaram da select

Console.WriteLine("0\t1\t\t\t2", areader[0].tostring(), areader.getstring(1), areader.getstring(2)); //fecha o reader areader.close(); //fecha a conexao aconnection.close(); (erro) catch(oledbexception e) Console.WriteLine("Erro: 0", e.errors[0].message); Se criarmos o nosso arquivo Main() e inserirmos a chamada a esse método criado e tudo estiver correto, conseguiremos ver os dados de nossa tabela. A chamada no Main() ficaria assim: public static void Main() Console.ReadKey(); Para nosso exemplo ficar mais interessante, vamos criar uma classe chamada Cliente. Esta classe terão os atributos iguais aos campos do banco Access e poderemos utilizá-los para carregar dados ou gravar dados no banco utilizando um objeto cliente. Também criaremos alguns métodos para facilitar alguns procedimentos. Vamos definir a classe cliente (lembrando de colocá-la no início da classe Programa, antes da classe abstrata: public class cliente public int Id get; set; public string Nome get; set; public string Email get; set; public void NovoCliente() Console.Write("Digite o nome: "); this.nome=console.readline(); Console.Write("Digite o email: "); this.email = Console.ReadLine(); this.id = 0; public void PreencheCliente(OleDbDataReader registro) //jajá falaremos sobre esse método this.id = registro.getint32(0); this.nome = registro.getstring(1); this.email = registro.getstring(2); public void Mostrar()

Console.WriteLine("Id\tNome\t\t\tE-mail"); Console.WriteLine("0\t1\t\t\t2", this.id.tostring(), this.nome, this.email); Iremos mudar então o nosso método Mostrar() da classe abstrata. Insira bem no início do método a instanciação de um objeto da classe cliente: cliente lido = new cliente(); e vamos alterar, dentro deste mesmo método, o laço While que criamos agora a pouco, que foi responsável por mostrar todos os registros que estavam no banco de dados: while(areader.read()) //faz um While para ler de um por um as linhas que retornaram da select lido.id = areader.getint32(0); lido.nome = areader.getstring(1); lido.email = areader.getstring(2); Console.WriteLine("0\t1\t\t\t2", lido.id.tostring(), lido.nome, lido.email); //Console.WriteLine("0\t1\t\t\t2", areader[0].tostring(), areader.getstring(1), areader.getstring(2)); Agora vamos executar novamente e ver que não houve nenhuma diferença aparente para o usuário, porém estamos inserindo os dados que estavam no banco em um objeto do tipo cliente. Isso será útil mais pra frente. É possível criarmos um vetor com todos os dados, mas iremos abordar isso futuramente. Agora vamos ver como incluir dados em nosso banco de dados. Iremos utilizar o método NovoCliente criado na classe cliente que irá ser responsável por ler os dados de um novo cliente a ser inserido no banco, armazenando seu conteúdo em um objeto que, depois, será utilizado para fornecer os dados para serem transmitidos para o banco. Vamos ver o código: public static void Incluir(cliente novo) //O método incluir recebe um cliente já com os dados cmd.commandtext = "Insert into Clientes (nome, email) values (\"" + novo.nome + "\",\"" + novo.email + "\")"; //executa a inserção no banco cmd.executenonquery();//como não é uma query, não retorna nada, o comando é outro cnn.close();//fecha a conexão com o banco Console.WriteLine("Error: 0", e.errors[0].message);

Por estarmos utilizando uma tabela cujo campo Id é autonumerado, não utilizamos ele na string de inserção. Ele terá o conteúdo preenchido automaticamente. Fiquem atento às concatenações dos valores com a string. Neste ponto, values (\"" + novo.nome + "\" encontramos a inserção de aspas (indicada por \") e a junção do conteúdo (indicada por " + novo.nome + "). Se o campo não for string, não necessitaríamos de colocar as aspas. Se o campo for data ou hora, ele utiliza # e para cada tipo de dados diferente, teremos uma notação específica. Esta notação muda de acordo com o banco de dados utilizado. Vamos agora fazer a chamada no Main() do método para incluir: public static void Main() cliente teste = new cliente(); teste.novocliente();//vamos preencher os dados para enviá-los para inclusão AcessoAoAccess.Incluir(teste); //passa o cliente já preenchido em teste para ser inserido Console.ReadKey(); Vamos criar então um método que realiza a procura de um nome específico no banco de dados. Este método receberá como parâmetro uma string para a busca, chamada QualNome. Deveremos ler esta string no Main() e enviar para o método na hora de chamá-lo. public static void Buscar(string QualNome) cliente achado = new cliente(); cmd.commandtext = "Select * from Clientes where Nome = \"" + QualNome + "\""; Console.WriteLine(cmd.CommandText); //executa a procura no banco OleDbDataReader resultado = cmd.executereader();//traz o resultado para o DataReader resultado.read();//datareader (resultado) tem uma cópia dos dados resultantes da sql if (resultado.hasrows) //verifica se retornou alguma linha da SQL (se achou o nome) achado.preenchecliente(resultado); //se achou o nome, preenche o cliente achado achado.mostrar();//para depois poder mostrar estes dados Console.WriteLine("Nome não encontrado");//emite aviso caso não ache o nome cnn.close();//fecha a conexão com o banco

Console.WriteLine("Error: 0", e.errors[0].message); Quando chamamos o método PreencheCliente() temos que enviar como parâmetro uma cópia dos dados resultantes da SQL executada. Para não termos que enviar um por um dos dados, podemos passar todo o resultado como parâmetro. Então, se verificar o método criado na classe Cliente, verá que ele recebe um OleDbDataReader, que é um objeto que tem estes dados. Vamos adicionar, então, a chamada no Main() para realizarmos a busca. Lembre-se que precisamos ler o nome a ser procurado. Podemos utilizar uma variável e passá-la como parâmetro, ou simplesmente, mandar como parâmetro o próprio retorno do Console.ReadLine(), desta forma: Console.Write("Qual o nome do cliente deseja procurar:"); AcessoAoAccess.Buscar(Console.ReadLine());//O usuário irá digitar e, o que for digitado, é enviado a Buscar. Agora que já sabemos como procurar e mostrar um cliente, podemos então criar um método que poderá dar a opção de apagar um registro procurado. Este método precisa realizar uma busca, mostrar o resultado desta busca, perguntar se deseja apagar o cliente e, somente depois, realizaremos a exclusão do registro. Então vamos criar o método Apagar(): public static void Apagar(string QualNome) cliente achado = new cliente(); string resp; cmd.commandtext = "Select * from Clientes where Nome = \"" + QualNome + "\""; Console.WriteLine(cmd.CommandText); //executa a procura no banco OleDbDataReader resultado = cmd.executereader(); resultado.read(); if (resultado.hasrows) achado.preenchecliente(resultado); achado.mostrar(); Console.Write("Deseja mesmo apagar este registro? (S/N)"); resp = Console.ReadLine();//vamos perguntar de quer apagar o cliente encontrado if ((resp == "S") (resp == "s"))//vamos colocar para aceitar S ou s como SIM resultado.close();//se aceitou apagar, vamos fechar o Reader, para liberar o cliene cmd.commandtext = "Delete from Clientes where Id = " + achado.id; //e apagá-lo cmd.executenonquery();//mais uma vez não retorna nada, por isso NonQuery Console.WriteLine("Registro apagado!"); Console.WriteLine("Nome não apagado");//se escolheu qualquer coisa que não s ou S

Console.WriteLine("Nome não encontrado");//se não achou o nome cnn.close(); Console.WriteLine("Error: 0", e.errors[0].message); Então iremos colocar no Main() a chamada para realizar a exclusão. Lembre-se que temos que fazer a solicitação do nome, tal qual na busca, antes de chamar o método para excluir. Console.Write("Qual o nome do cliente deseja apagar:"); AcessoAoAccess.Apagar(Console.ReadLine()); Por fim, iremos agora realizar a última tarefa. A Alteração de um registro. Como não estamos utilizando um sistema GUI, esta alteração é um pouco complicada para o usuário final entender. Então vamos fazer de uma forma um pouco mais fácil. Iremos realizar uma busca inicial, tal qual para exclusão. Em seguida, iremos permitir que o usuário possa redigitar o nome e o e-mail. Caso ele não deseje alterar qualquer um dos campos, irá apertar um Enter sem digitar nada, mantendo desta forma aquele campo específico sem alteração. Vamos criar o método de alteração: public static void Alterar(string QualNome) cliente achado = new cliente(); cmd.commandtext = "Select * from Clientes where Nome = \"" + QualNome + "\""; Console.WriteLine(cmd.CommandText); //executa a busca no banco OleDbDataReader resultado = cmd.executereader(); resultado.read(); if (resultado.hasrows) //Caso encontre o registro string nome, email; //criamos duas variáveis para auxiliar na alteração achado.preenchecliente(resultado); achado.mostrar();//vamos mostrar os dados encontrados Console.Write("Digite o novo nome (ou enter para não alterar nada): "); nome = Console.ReadLine();//e solicitar o novo nome ou enter vazio para não mudar Console.Write("Digite o novo email (ou enter para não alterar nada): "); email = Console.ReadLine();//e a mesma coisa para o e-mail if (nome!= "")//se foi digitado um novo nome, vamos trocar este nome no objeto achado.nome = nome; if (email!= "")//a mesma coisa para o e-mail

achado.email = email; resultado.close();//agora iremos fechar o Reader para liberar o cliente e cmd.commandtext = "Update Clientes set nome = \"" + achado.nome + "\", email=\"" + achado.email + "\" where Id = " + achado.id; //preencher a string que iremos usar para alterar cmd.executenonquery();//como não retorna nada, executamos com um NonQuery Console.WriteLine("Registro alterado!"); Console.WriteLine("Nome não encontrado"); cnn.close(); Console.WriteLine("Error: 0", e.errors[0].message); Por fim, vamos colocar em nosso Main() a instrução para realizar a alteração, tal qual a busca e a exclusão de registros. Console.Write("Qual o nome do cliente deseja alterar:"); AcessoAoAccess.Alterar(Console.ReadLine()); Com estas operações, conseguimos realizar todas as operações básicas em nosso banco de dados. Existem muitas oportunidades ainda a serem exploradas. Vamos então colocar o código completo: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.OleDb; //necessário para realizar acesso a banco de dados do access class Program public class cliente public int Id get; set; public string Nome get; set; public string Email get; set; public void NovoCliente() Console.Write("Digite o nome: "); this.nome=console.readline(); Console.Write("Digite o email: "); this.email = Console.ReadLine(); this.id = 0; public void PreencheCliente(OleDbDataReader registro)

this.id = registro.getint32(0); this.nome = registro.getstring(1); this.email = registro.getstring(2); public void Mostrar() Console.WriteLine("Id\tNome\t\t\tE-mail"); Console.WriteLine("0\t1\t\t\t2", this.id.tostring(), this.nome, this.email); public static class AcessoAoAccess public static OleDbConnection AbrirConexao() //como vários métodos precisam conextar, cria um só para facilitar esta ação return new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sergio\teste.mdb"); public static void Mostrar() cliente lido = new cliente(); OleDbConnection aconnection = AbrirConexao(); OleDbCommand acommand = new OleDbCommand("select * from Clientes", aconnection); aconnection.open(); //cria o objeto datareader para fazer a conexao com a tabela OleDbDataReader areader = acommand.executereader(); da select //Faz a interação com o banco de dados lendo os dados da tabela Console.WriteLine("Os valores retornados da tabela são : "); Console.WriteLine("Id\tNome\t\t\tE-mail"); while(areader.read()) //faz um While para ler de um por um as linhas que retornaram lido.id = areader.getint32(0); lido.nome = areader.getstring(1); lido.email = areader.getstring(2); Console.WriteLine("0\t1\t\t\t2", lido.id.tostring(), lido.nome, lido.email); //Console.WriteLine("0\t1\t\t\t2", areader[0].tostring(), areader.getstring(1), areader.getstring(2)); //fecha o reader areader.close(); //fecha a conexao aconnection.close();

catch(oledbexception e) Console.WriteLine("Error: 0", e.errors[0].message); public static void Incluir(cliente novo) //O método incluir recebe um cliente já com os dados cmd.commandtext = "Insert into Clientes (nome, email) values (\"" + novo.nome + "\",\"" + novo.email + "\")"; //executa a inserção no banco cmd.executenonquery();//como não é uma query, não retorna nada, o comando é outro cnn.close();//fecha a conexão com o banco Console.WriteLine("Error: 0", e.errors[0].message); public static void Buscar(string QualNome) cliente achado = new cliente(); cmd.commandtext = "Select * from Clientes where Nome = \"" + QualNome + "\""; Console.WriteLine(cmd.CommandText); //executa a procura no banco OleDbDataReader resultado = cmd.executereader();//traz o resultado para o DataReader resultado.read();//datareader (resultado) tem uma cópia dos dados resultantes da sql if (resultado.hasrows) //verifica se retornou alguma linha da SQL (se achou o nome) achado.preenchecliente(resultado); //se achou o nome, preenche o cliente achado achado.mostrar();//para depois poder mostrar estes dados

Console.WriteLine("Nome não encontrado");//emite aviso caso não ache o nome cnn.close();//fecha a conexão com o banco Console.WriteLine("Error: 0", e.errors[0].message); public static void Apagar(string QualNome) cliente achado = new cliente(); string resp; cmd.commandtext = "Select * from Clientes where Nome = \"" + QualNome + "\""; Console.WriteLine(cmd.CommandText); //executa a procura no banco OleDbDataReader resultado = cmd.executereader(); resultado.read(); if (resultado.hasrows) achado.preenchecliente(resultado); achado.mostrar(); Console.Write("Deseja mesmo apagar este registro? (S/N)"); resp = Console.ReadLine();//vamos perguntar de quer apagar o cliente encontrado if ((resp == "S") (resp == "s"))//vamos colocar para aceitar S ou s como SIM resultado.close();//se aceitou apagar, vamos fechar o Reader, para liberar o cliene cmd.commandtext = "Delete from Clientes where Id = " + achado.id; //e apagá-lo cmd.executenonquery();//mais uma vez não retorna nada, por isso NonQuery Console.WriteLine("Registro apagado!"); Console.WriteLine("Nome não apagado");//se escolheu qualquer coisa que não s ou S Console.WriteLine("Nome não encontrado");//se não achou o nome cnn.close(); Console.WriteLine("Error: 0", e.errors[0].message);

public static void Alterar(string QualNome) cliente achado = new cliente(); cmd.commandtext = "Select * from Clientes where Nome = \"" + QualNome + "\""; Console.WriteLine(cmd.CommandText); //executa a busca no banco OleDbDataReader resultado = cmd.executereader(); resultado.read(); if (resultado.hasrows) //Caso encontre o registro string nome, email; //criamos duas variáveis para auxiliar na alteração achado.preenchecliente(resultado); achado.mostrar();//vamos mostrar os dados encontrados Console.Write("Digite o novo nome (ou enter para não alterar nada): "); nome = Console.ReadLine();//e solicitar o novo nome ou enter vazio para não mudar Console.Write("Digite o novo email (ou enter para não alterar nada): "); email = Console.ReadLine();//e a mesma coisa para o e-mail if (nome!= "")//se foi digitado um novo nome, vamos trocar este nome no objeto achado.nome = nome; if (email!= "")//a mesma coisa para o e-mail achado.email = email; resultado.close();//agora iremos fechar o Reader para liberar o cliente e cmd.commandtext = "Update Clientes set nome = \"" + achado.nome + "\", email=\"" + achado.email + "\" where Id = " + achado.id; //preencher a string que iremos usar para alterar cmd.executenonquery();//como não retorna nada, executamos com um NonQuery Console.WriteLine("Registro alterado!"); Console.WriteLine("Nome não encontrado"); cnn.close(); Console.WriteLine("Error: 0", e.errors[0].message);

public static void Main() cliente teste = new cliente(); teste.novocliente(); AcessoAoAccess.Incluir(teste); Console.Write("Qual o nome do cliente deseja procurar:"); AcessoAoAccess.Buscar(Console.ReadLine()); Console.Write("Qual o nome do cliente deseja apagar:"); AcessoAoAccess.Apagar(Console.ReadLine()); Console.Write("Qual o nome do cliente deseja alterar:"); AcessoAoAccess.Alterar(Console.ReadLine()); Console.ReadKey();