Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tópicos Especiais Banco de Dados utilizando Windows Forms .NET com C# e ADO.NET Aula 06 Trabalhando com Banco de Dados No modelo ADO.Net podemos acessar o banco de dados de duas formas: Modo conectado Neste modo, fazemos a conexão com o banco de dados e essa conexão fica aberta até finalizarmos nossa aplicação, ou seja, a aplicação está diretamente conectada ao banco, qualquer alteração é feita diretamente na base. Esse modelo permite termos sempre a informação atualizada. Ideal para sistemas em que os dados estão sempre mudando. Exemplo: um controle de estoque; Um problema nesse modo pode ser a causa de um tráfego maior na rede. Modo desconectado No modo desconectado, fazemos a conexão com o banco e deixamos uma cópia da base na memória, sendo assim, as modificações são feitas sempre na memória, ao término da aplicação, podemos conectar na base e atualizar as informações. Esse modelo é utilizado quando o banco não é atualizado com muita freqüência. O maior problema nesse modelo é a possibilidade de inconsistência dos dados. Exemplo: duas pessoas acessam através do modo desconectado um mesmo banco, durante o dia realizam diversas alterações e ao final do dia atualizam o servidor com a base. Como irá ocorrer a atualização? Modo desconectado DataConnection DataAdapter DataSet Aplicativo cliente Banco de Dados Classe de conexão Ponte entre o banco e o DataSet Classe para gerenciamento da base no modo desconectado (em memória) Modo conectado DataConnection DataReader Aplicativo cliente Banco de Dados DataCommnad DataCommnad Somente leitura Comandos SQL Introdução – ADO.NET A Microsoft criou o ADO.NET e toda uma arquitetura baseada em XML. Com isso podemos afirmar que esta tecnologia trabalha com dados desconectados. Escalabilidade – pelo fato de o DataSet ser baseado em acesso a dados desconectados, por ter uma arquitetura baseada no XML, o tempo de manipulação dos dados no banco de dados torna-se mínimo. Portanto mesmo com um número simultâneo de acesso maior, a aplicação consegue garantir uma boa escalabilidade; Performance – no ADO.NET a transmissão de dados é feita em XML, com isso pode se comunicar com diversas plataformas e aplicativos; Segurança – um firewall não consegue bloquear um arquivo texto. Portanto como o ADO.NET é baseado em XML, as portas dos firewalls não são mais problemas. OleDb A Plataforma.Net criou esta classe com vários provedores para o acesso de qualquer plataforma, como: SQL Server, Oracle e Access. Esta classe permite os seguintes provedores: Modelo com ADO.NET e ASP.NET. Classes para acesso ao MySQL Seguindo a mesma idéia apresentada anteriormente, temos as classes: Métodos importantes a) ExecuteReader – utilizado para executar consultas (típico em comandos Select). b) ExecuteScalar - para consultas que retornam um único valor (como um comando Select que calcula uma soma). c) ExecuteNonQuery - para aqueles comandos que não retornam valor (como um comando Insert). Praticando Para demonstrar a utilização de banco de dados, iremos criar um projeto novo onde permita uma entrada de dados em um formulário e possamos armazenar os dados neste banco de dados. Crie uma solução chamada slnCadasto e um projeto Windows form de nome Alunos. Nesse projeto cria a seguinte tela: btnInserir btnConsultar btnAlterar btnExcluir btnExibir txtId txtNome txtCurso No formulário, crie o layout abaixo com os campos textos e 5 botões e seus respectivos nomes: Praticando Praticando Acrescente um projeto a solução de nome CadastroDao e nesse projeto crie uma classe de nome Connection.cs using System.Data.SqlClient; namespace CadastroDao{ class Connection{ // vamos nos conectar ao SQL Server Express e à base de dados private static string connString = @"Data Source=LUIZREIS\SQLEXPRESS;Initial Catalog=aluno;User ID=sa;Password=unicsul"; // representa a conexão com o banco private static SqlConnection conn = null; // método que permite obter a conexão public static SqlConnection getConnection(){ // vamos criar a conexão conn = new SqlConnection(connString); // a conexão foi feita com sucesso? try{ // abre a conexão e a devolve ao chamador do método conn.Open(); } catch (SqlException sqle){ conn = null; // ops! o que aconteceu? // uma boa idéia aqui é gravar a exceção em um arquivo de log } return conn; } public static void closeConnection(){ if (conn != null){ conn.Close(); } } } } Praticando Agora precisamos referenciar o projeto DAO para o projeto de cadastro. Para isso, selecione com o botão direito do mouse em cima do referências e clique em Adicionar Referência. Praticando – SQL Server using System.Data; using System.Data.SqlClient; namespace CadastroDao { public class Connection { // vamos nos conectar ao SQL Server Express e à base de dados private static string connString = @"Data Source=LUIZREIS\SQLEXPRESS;Initial Catalog=aluno;User ID=sa;Password=unicsul"; // representa a conexão com o banco private static SqlConnection conn = null; // método que permite obter a conexão public static SqlConnection getConnection() { // vamos criar a conexão conn = new SqlConnection(connString); // a conexão foi feita com sucesso? try { // abre a conexão e a devolve ao chamador do método conn.Open(); } catch (SqlException sqle) { conn = null; // ops! o que aconteceu? // uma boa idéia aqui é gravar a exceção em um arquivo de log } return conn; } public static void closeConnection() { if (conn != null) { conn.Close(); } } } } Praticando Crie um projeto chamado CadastroBasic na solução slnCadastro. Crie uma classe Aluno.cs namespace CadastroBasic { public class Aluno { private int id; private String nome; private String curso; public Aluno(int id, string nome, string curso) { this.id = id; this.nome = nome; this.curso = curso; } public int Id { get => id; set => id = value; } public string Nome { get => nome; set => nome = value; } public string Curso { get => curso; set => curso = value; } } } Praticando Crie um projeto chamado CadastroBus na solução slnCadastro. Crie uma classe de Negocio para inserir as informações do Aluno, criar uma classe chamada AlunoNegocio.cs. Será necessário importar o projeto Basic e Dao para utilização. using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using CadastroBasic; using CadastroDao; namespace CadastroBus { public class AlunoNegocio { } } Classe AlunoNegocio Praticando A classe terá um método que irá acessar o banco, repassar asinformações da janela e inserir na tela. public bool insertAluno(Aluno aluno) { int ret; SqlCommand command = new SqlCommand(null, Connection.getConnection()); // Prepara o comando de inserção. command.CommandText = "INSERT INTO aluno (Id, nome, curso) VALUES (@id, @nome, @curso)"; //Cria as referências dos parâmetros SqlParameter idAluno = new SqlParameter("@id", SqlDbType.Int, 0); SqlParameter nomAluno = new SqlParameter("@nome", SqlDbType.Text, 80); SqlParameter nomCurso = new SqlParameter("@curso", SqlDbType.Text, 150); //Setar os valores para os parâmetros idAluno.Value = aluno.Id; nomAluno.Value = aluno.Nome; nomCurso.Value = aluno.Curso; //Adiciona os valores command.Parameters.Add(idAluno); command.Parameters.Add(nomAluno); command.Parameters.Add(nomCurso); // Verifica a instrução se está correta para então executar o comando SQL. command.Prepare(); ret = command.ExecuteNonQuery(); Connection.closeConnection(); if (ret > 0) return true; else return false; } Classe AlunoNegocio Praticando A classe terá um método que irá acessar o banco e alterar as informações dos aluno com base no id, passando o nome e curso para alteração public bool updateAluno(Aluno aluno) { int ret; SqlCommand command = new SqlCommand(null, Connection.getConnection()); // Prepara o comando de inserção. command.CommandText = "UPDATE aluno SET nome=@nome, curso=@curso where Id = @id"; //Cria as referências dos parâmetros SqlParameter idAluno = new SqlParameter("@id", SqlDbType.Int, 0); SqlParameter nomAluno = new SqlParameter("@nome", SqlDbType.Text, 80); SqlParameter nomCurso = new SqlParameter("@curso", SqlDbType.Text, 150); //Setar os valores para os parâmetros idAluno.Value = aluno.Id; nomAluno.Value = aluno.Nome; nomCurso.Value = aluno.Curso; //Adiciona os valores command.Parameters.Add(idAluno); command.Parameters.Add(nomAluno); command.Parameters.Add(nomCurso); // Verifica a instrução se está correta para então executar o comando SQL. command.Prepare(); ret = command.ExecuteNonQuery(); Connection.closeConnection(); if (ret > 0) return true; else return false; } Classe AlunoNegocio Praticando A classe terá um método que irá acessar o banco e excluir as informações dos aluno com base no id public bool deleteAluno(int id) { int ret; SqlCommand command = new SqlCommand(null, Connection.getConnection()); // Prepara o comando de exclusão. command.CommandText = "DELETE FROM aluno where Id = @id"; //Cria as referências dos parâmetros SqlParameter idAluno = new SqlParameter("@id", SqlDbType.Int, 0); //Setar os valores para os parâmetros idAluno.Value = id; //Adiciona os valores command.Parameters.Add(idAluno); // Verifica a instrução se está correta para então executar o comando SQL. command.Prepare(); ret = command.ExecuteNonQuery(); Connection.closeConnection(); if (ret > 0) return true; else return false; } Classe AlunoNegocio Praticando A classe terá um método que irá acessar o banco e retornar as informações dos aluno com base no id. public Aluno searchAluno(int id) { SqlCommand command = new SqlCommand(null, Connection.getConnection()); // Prepara o comando de pesquisa com a cláusula por Id Aluno. command.CommandText = "SELECT Id,nome,curso from aluno where Id = @id"; //Cria as referências do parâmetro SqlParameter idAluno = new SqlParameter("@id", SqlDbType.Int, 0); //Setar o valor para o parâmetro idAluno.Value = id; //Adiciona o valore command.Parameters.Add(idAluno); // Verifica a instrução se está correta para então executar o comando SQL. command.Prepare(); SqlDataReader dr = command.ExecuteReader(); Aluno aluno; if (dr.HasRows) { dr.Read(); aluno = new Aluno(Convert.ToInt32(dr["Id"]), dr["nome"].ToString(), dr["curso"].ToString()); } else { aluno = null; } dr.Close(); command.Dispose(); Connection.getConnection(); return aluno; } Praticando Agora iremos criar outro formulário com o função de exibir em um listBox todos os alunos cadastrados, e após selecionar cada item, serem exibidos na caixa de texto. Para isso, iremos adicionar um novo formulário no projeto. Selecione com o botão direito do mouse no projeto e selecione Add / Windows Form. Iremos deixar o layout deste formulário conforme abaixo. Perceba que estamos utilizando agora um objeto novo denominado listBox, e daremos para este listbox o nome de lbxDados. lbxDados btnFechar txtId txtNome txtCurso Praticando private void btnExibir_Click(object sender, EventArgs e) { frmAlunosCadastrados f2 = new frmAlunosCadastrados(); f2.Sow(); } Clique 2 vezes no botão Exibir do formulário principal e se abrirá o evento clique deste botão, onde iremos adicionar o código abaixo: Classe AlunoNegocio Praticando A classe aluno terá um método que irá acessar o banco e retornaras informações de todos alunos public List<Aluno> getAlunos() { List<Aluno> alunos = new List<Aluno>(); SqlCommand command = new SqlCommand(null, Connection.getConnection()); // Prepara o comando de pesquisa com a cláusula por Id Aluno. command.CommandText = "SELECT Id,nome,curso from aluno"; // Verifica a instrução se está correta para então executar o comando SQL. command.Prepare(); SqlDataReader dr = command.ExecuteReader(); Aluno aluno; while (dr.Read()) { aluno = new Aluno(Convert.ToInt32(dr["Id"]), dr["nome"].ToString(), dr["curso"].ToString()); alunos.Add(aluno); } dr.Close(); command.Dispose(); Connection.getConnection() return alunos; } Praticando No formulário frmAlunosCadastrados, clique 2 vezes em qualquer parte do formulário e se abrirá o evento Form Load deste formulário, onde iremos adicionar o código abaixo: private void frmAlunosCadastrados_Load(object sender, EventArgs e) { AlunoNegocio alunosGravados = new AlunoNegocio(); List<Aluno> alunos = alunosGravados.getAlunos(); for(int i = 0; i < alunos.Count; i++) { lbxDados.Items.Add(alunos[i].Id.ToString()); } } Praticando No formulário frmAlunosCadastrados, clique 2 vezes no objeto ListBox e se abrirá o evento SelectedIndexChanged, onde iremosadicionar o código abaixo: private void lbxDados_SelectedIndexChanged(object sender, EventArgs e) { int id = Convert.ToInt32(lbxDados.SelectedItem); Aluno aluno = new Aluno(0, "", ""); AlunoNegocio alunosGravados = new AlunoNegocio(); Aluno resultadoAluno = alunosGravados.searchAluno(id); txtId.Text = resultadoAluno.Id.ToString(); txtNome.Text = resultadoAluno.Nome; txtCurso.Text = resultadoAluno.Curso; } Praticando Para finalizar, no formulário frmAlunosCadastrados, clique 2 vezes no botão fechar e se abrirá o evento clique deste botão, onde iremos adicionar o código abaixo: private void btnFechar_Click(object sender, EventArgs e) { Close(); } DEITEL, H. M. C# Como Programar. São Paulo: Pearson Education do Brasil, 2003 DEITEL, H. M. Visual Basic. Net: Como Programar. São Paulo: Pearson Education do Brasil, 2004 Portal do centro do desenvolvedor para .Net, .Net Framework Developer Center: http://msdn.microsoft.com/pt-br/vstudio/aa496123 Leia sobre a visão geral conceitual do .Net Framwork: http://msdn.microsoft.com/pt- br/library/zw4w595w.aspx Leia sobre os estudos de caso do .Net Framework: http://www.microsoft.com/net/CaseStudies/ Instruções passo a passo: criando um arquivo de banco de dados local no Visual Studio http://msdn.microsoft.com/pt-br/library/ms233763.aspx Referência www.cruzeirodosul.edu.br
Compartilhar