Baixe o app para aproveitar ainda mais
Prévia do material em texto
Treinamento em C# WebDeveloper Aula 06 Sexta-feira, 09 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# Criando uma nova solution em branco: Criando um projeto console: Criando a base de dados: MDF - Master Database File Arquivo de banco de dados local do sqlserver App.config.xml Mapeamento da connectionstring do banco de dados <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> <connectionStrings> <add name="Aula06" connectionString="Data Source=(LocalDB)\MSSQLLocalDB; AttachDbFilename=C:\Users\COTI\Desktop\Aula_09.11.18\ Aula06\Projeto01\App_Data\Banco.mdf;Integrated Security=True" /> </connectionStrings> </configuration> ---------------- Diagrama de Entidade Relacionamento (DER) Diagrama de banco de dados Criando as tabelas no banco de dados: Linguagem SQL Script das tabelas: create table Categoria( IdCategoria integer identity(1,1), Nome nvarchar(50) not null, primary key(IdCategoria)) go create table Produto( IdProduto integer identity(1,1), Nome nvarchar(50) not null, Preco decimal(18,2) not null, Quantidade integer not null, IdCategoria integer not null, primary key(IdProduto), foreign key(IdCategoria) references Categoria(IdCategoria)) go Diagrama de Classes Modelagem Orientada a Objetos · Classes de entidade: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Projeto01.Entities { public class Categoria { public int IdCategoria { get; set; } public string Nome { get; set; } //Relacionamento (TER-MUITOS) public List<Produto> Produtos { get; set; } //construtor default.. public Categoria() { //vazio } //sobrecarga de métodos (overloading) public Categoria(int idCategoria, string nome) { IdCategoria = idCategoria; Nome = nome; } //sobrecarga de métodos (overloading) public Categoria(int idCategoria, string nome, List<Produto> produtos) : this(idCategoria, nome) { Produtos = produtos; } //sobrescrita de método (override) public override string ToString() { return $"Id: {IdCategoria}, Nome: {Nome}"; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Projeto01.Entities { public class Produto { public int IdProduto { get; set; } public string Nome { get; set; } public decimal Preco { get; set; } public int Quantidade { get; set; } public Categoria Categoria { get; set; } public Produto() { } public Produto(int idProduto, string nome, decimal preco, int quantidade) { IdProduto = idProduto; Nome = nome; Preco = preco; Quantidade = quantidade; } public Produto(int idProduto, string nome, decimal preco, int quantidade, Categoria categoria) : this(idProduto, nome, preco, quantidade) { Categoria = categoria; } public override string ToString() { return $"Id: {IdProduto}, Nome: {Nome}, Preço: {Preco}, Quantidade: {Quantidade}"; } } } Criando a classe de conexão do banco de dados: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //SqlServer.. namespace Projeto01.Repositories { public class Conexao { public SqlConnection Connection { get; set; } public SqlCommand Command { get; set; } public SqlDataReader DataReader { get; set; } public SqlTransaction Transaction { get; set; } public void AbrirConexao() { Connection = new SqlConnection(); Connection.Open(); } public void FecharConexao() { Connection.Close(); } } } Obtendo a connectionstring Adicionando referencia para System.Configuration Selecione: System.Configuration using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //SqlServer.. using System.Configuration; namespace Projeto01.Repositories { public class Conexao { public SqlConnection Connection { get; set; } public SqlCommand Command { get; set; } public SqlDataReader DataReader { get; set; } public SqlTransaction Transaction { get; set; } public void AbrirConexao() { Connection = new SqlConnection(ConfigurationManager.ConnectionStrings ["Aula06"].ConnectionString); Connection.Open(); } public void FecharConexao() { Connection.Close(); } } } Interface Criando um contrato para declarar os métodos abstratos que deverão ser implementados pelas classes de repositorio: using Projeto01.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Projeto01.Contracts { public interface IRepository<T> where T : class { //métodos abstratos void Inserir(T obj); void Atualizar(T obj); void Excluir(int id); List<T> Consultar(); } } Implementando a interface genérica: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //importando.. using Projeto01.Entities; //importando.. using Projeto01.Contracts; //importando.. namespace Projeto01.Repositories { public class CategoriaRepository : Conexao, IRepository<Categoria> { public void Atualizar(Categoria obj) { throw new NotImplementedException(); } public List<Categoria> Consultar() { throw new NotImplementedException(); } public void Excluir(int id) { throw new NotImplementedException(); } public void Inserir(Categoria obj) { throw new NotImplementedException(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //importando.. using Projeto01.Entities; //importando.. using Projeto01.Contracts; //importando.. namespace Projeto01.Repositories { public class ProdutoRepository : Conexao, IRepository<Produto> { public void Atualizar(Produto obj) { throw new NotImplementedException(); } public List<Produto> Consultar() { throw new NotImplementedException(); } public void Excluir(int id) { throw new NotImplementedException(); } public void Inserir(Produto obj) { throw new NotImplementedException(); } } } --------------------------------------------------- Implementando o Repositorio de Categoria: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //importando.. using Projeto01.Entities; //importando.. using Projeto01.Contracts; //importando.. namespace Projeto01.Repositories { public class CategoriaRepository : Conexao, IRepository<Categoria> { public void Atualizar(Categoria obj) { string query = "update Categoria set Nome = @Nome " + "where IdCategoria = @IdCategoria"; Command = new SqlCommand(query,Connection); Command.Parameters.AddWithValue("@Nome", obj.Nome); Command.Parameters.AddWithValue("@IdCategoria", obj.IdCategoria); Command.ExecuteNonQuery(); } public List<Categoria> Consultar() { string query = "select * from Categoria"; Command = new SqlCommand(query, Connection); DataReader = Command.ExecuteReader(); //declarar uma lista de Categoria List<Categoria> lista = new List<Categoria>(); //varrer o DataReader.. while(DataReader.Read()) //lendo cada registro contido no DataReader { Categoria categoria = new Categoria(); categoria.IdCategoria = Convert.ToInt32(DataReader ["IdCategoria"]); categoria.Nome = Convert.ToString(DataReader["Nome"]); lista.Add(categoria); } //retornando a lista.. return lista; } public void Excluir(int id) { string query = "delete from Categoria where IdCategoria = @IdCategoria"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@IdCategoria", id); Command.ExecuteNonQuery(); } public void Inserir(Categoria obj) { string query = "insert into Categoria(Nome) values(@Nome)"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", obj.Nome); Command.ExecuteNonQuery(); } } } Implementando o Repositorio de Produto: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //importando.. using Projeto01.Entities; //importando.. using Projeto01.Contracts; //importando.. namespace Projeto01.Repositories { public class ProdutoRepository : Conexao, IRepository<Produto> { public void Atualizar(Produto obj) { string query = "update Produto set Nome = @Nome, Preco = @Preco, " + "Quantidade = @Quantidade, IdCategoria = @IdCategoria " + "where IdProduto = @IdProduto"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", obj.Nome); Command.Parameters.AddWithValue("@Preco", obj.Preco); Command.Parameters.AddWithValue("@Quantidade", obj.Quantidade); Command.Parameters.AddWithValue("@IdCategoria", obj.Categoria.IdCategoria); Command.Parameters.AddWithValue("@IdProduto", obj.IdProduto); Command.ExecuteNonQuery(); } public List<Produto> Consultar() { string query = "select p.IdProduto, p.Nome, p.Quantidade, p.Preco, " + "c.IdCategoria, c.Nome as NomeCategoria " + "from Produto p inner join Categoria c " + "on p.IdCategoria = c.IdCategoria"; Command = new SqlCommand(query, Connection); DataReader = Command.ExecuteReader(); List<Produto> lista = new List<Produto>(); while(DataReader.Read()) { Produto produto = new Produto(); produto.Categoria = new Categoria(); produto.IdProduto = Convert.ToInt32(DataReader["IdProduto"]); produto.Nome = Convert.ToString(DataReader["Nome"]); produto.Preco = Convert.ToDecimal(DataReader["Preco"]); produto.Quantidade = Convert.ToInt32(DataReader["Quantidade"]); produto.Categoria.IdCategoria = Convert.ToInt32 (DataReader["IdCategoria"]); produto.Categoria.Nome = Convert.ToString (DataReader["NomeCategoria"]); lista.Add(produto); } return lista; } public void Excluir(int id) { string query = "delete from Produto where IdProduto = @IdProduto"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@IdProduto", id); Command.ExecuteNonQuery(); } public void Inserir(Produto obj) { string query = "insert into Produto(Nome, Preco, Quantidade, IdCategoria) " + "values(@Nome, @Preco, @Quantidade, @IdCategoria)"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", obj.Nome); Command.Parameters.AddWithValue("@Preco", obj.Preco); Command.Parameters.AddWithValue("@Quantidade", obj.Quantidade); Command.Parameters.AddWithValue("@IdCategoria", obj.Categoria.IdCategoria); Command.ExecuteNonQuery(); } } } ---------------------------------------- Testando: Método Main() finally O catch é usado para capturar exceções e só, o finally é executado sempre após o final de um bloco de código dentro do try ou catch, se houver um, havendo exceção ou não. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Projeto01.Entities; //importando using Projeto01.Repositories; //importando namespace Projeto01 { class Program { static void Main(string[] args) { CategoriaRepository categoriaRepository = new CategoriaRepository(); try { Console.WriteLine("\nCADASTRO DE CATEGORIA\n"); Categoria categoria = new Categoria(); Console.Write("Informe o nome da Categoria....: "); categoria.Nome = Console.ReadLine(); categoriaRepository.AbrirConexao(); categoriaRepository.Inserir(categoria); Console.WriteLine("\nCategoria cadastrado com sucesso."); } catch(Exception e) { Console.WriteLine("\nOcorreu um erro: " + e.Message); } finally { categoriaRepository.FecharConexao(); } Console.ReadKey(); } } } Executando: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Projeto01.Entities; //importando using Projeto01.Repositories; //importando namespace Projeto01 { class Program { static void Main(string[] args) { CategoriaRepository categoriaRepository = new CategoriaRepository(); try { Console.WriteLine("\nCADASTRO DE CATEGORIA\n"); Categoria categoria = new Categoria(); Console.Write("Informe o nome da Categoria....: "); categoria.Nome = Console.ReadLine(); categoriaRepository.AbrirConexao(); categoriaRepository.Inserir(categoria); Console.WriteLine("\nCategoria cadastrado com sucesso."); //exibindo a consulta.. Console.WriteLine("\n\tCONSULTA DE CATEGORIAS"); foreach(Categoria registro in categoriaRepository.Consultar()) { Console.WriteLine("\n\tCategoria ->" + registro.ToString()); } } catch(Exception e) { Console.WriteLine("\nOcorreu um erro: " + e.Message); } finally { categoriaRepository.FecharConexao(); } Console.ReadKey(); } } } Executando: Auto-Relacionamento: Relacionamento de associação para a mesma entidade Exemplo: Pessoa TEM Pessoa (Conjuge) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Projeto01 { class Program { static void Main(string[] args) { Pessoa p1 = new Pessoa(); p1.Nome = "Sergio"; p1.Sexo = "Masculino"; Pessoa p2 = new Pessoa(); p2.Nome = "Juliana"; p2.Sexo = "Feminino"; p1.Conjuge = p2; } } public class Pessoa { public string Nome { get; set; } public string Sexo { get; set; } public Pessoa Conjuge { get; set; } } } 18
Compartilhar