Baixe o app para aproveitar ainda mais
Prévia do material em texto
Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 1 Página inicial do projeto: http://localhost:59188/Home/Index Criando a base de dados: MDF - Master Database File Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 2 Criando a tabela de Funcionarios: create table Funcionario( IdFuncionario integer identity(1,1), Nome nvarchar(50) not null, Salario decimal(18,2) not null, DataAdmissao date not null, primary key(IdFuncionario)) Executando: Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 3 \Web.config.xml Principal arquivo de configuração do projeto Asp.Net, neste exemplo iremos utiliza-lo para mapear a string de conexão com o banco de dados. <!-- Mapeamento da string de conexão --> <connectionStrings> <add name="aula08" connectionString="Data Source=(LocalDB)\MSSQLLocalDB; AttachDbFilename=C:\Users\COTI\Desktop\_Aula_14.11.18\Aula08\ Projeto.Presentation\App_Data\Banco.mdf;Integrated Security=True" /> </connectionStrings> ----------------------- 3 - Camada de Acesso a dados Repositorio de dados Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 4 Criando a classe de entidade: Funcionario using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Projeto.Repository.Entities { public class Funcionario { //propriedades set / get [prop] + 2x[tab] public int IdFuncionario { get; set; } public string Nome { get; set; } public decimal Salario { get; set; } public DateTime DataAdmissao { get; set; } //construtor default [ctor] + 2x[tab] public Funcionario() { //vazio } //sobrecarga de construtores (overloading) public Funcionario(int idFuncionario, string nome, decimal salario, DateTime dataAdmissao) { IdFuncionario = idFuncionario; Nome = nome; Salario = salario; DataAdmissao = dataAdmissao; } Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 5 //sobrescrita do método ToString() public override string ToString() { return $"Id: {IdFuncionario}, Nome: {Nome}, Salário: {Salario}, Admissão: {DataAdmissao}"; } } } Criando uma classe para conexão com o banco de dados: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //Acesso ao sqlserver namespace Projeto.Repository.Repositories { public class Conexao { //propriedades.. 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(); } Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 6 public void FecharConexao() { Connection.Close(); } } } Obtendo a connectionstring mapeada no arquivo Web.config.xml ** Adicionar no projeto uma referencia para System.Configuration using System; Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 7 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //Acesso ao sqlserver using System.Configuration; //Acesso ao \Web.config.xml namespace Projeto.Repository.Repositories { public class Conexao { //propriedades.. 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 ["aula08"].ConnectionString); Connection.Open(); } public void FecharConexao() { Connection.Close(); } } } Criando uma classe para implementar um CRUD (Inserir, Atualizar, Excluir e Consultar) com a entidade Funcionario. Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 8 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; //Acesso ao SqlServer using Projeto.Repository.Entities; //Classes de entidade namespace Projeto.Repository.Repositories { public class FuncionarioRepository : Conexao { //método para inserir um funcionário na base de dados.. public void Inserir(Funcionario f) { string query = "insert into Funcionario(Nome, Salario, DataAdmissao) " + "values(@Nome, @Salario, @DataAdmissao)"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", f.Nome); Command.Parameters.AddWithValue("@Salario", f.Salario); Command.Parameters.AddWithValue("@DataAdmissao", f.DataAdmissao); Command.ExecuteNonQuery(); } //método para atualizar um funcionário na base de dados.. public void Atualizar(Funcionario f) { string query = "update Funcionario set Nome = @Nome, Salario = @Salario, " + "DataAdmissao = @DataAdmissao where IdFuncionario = @IdFuncionario"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@Nome", f.Nome); Command.Parameters.AddWithValue("@Salario", f.Salario); Command.Parameters.AddWithValue("@DataAdmissao", f.DataAdmissao); Command.Parameters.AddWithValue("@IdFuncionario", f.IdFuncionario); Command.ExecuteNonQuery(); } //método para excluir o funcionario na base de dados.. public void Excluir(int idFuncionario) { string query = "delete from Funcionario where IdFuncionario = @IdFuncionario"; Command = new SqlCommand(query, Connection); Command.Parameters.AddWithValue("@IdFuncionario", idFuncionario); Command.ExecuteNonQuery(); } //método para listar todas as vendas na base de dados.. public List<Funcionario> Consultar() { string query = "select * from Funcionario"; Command = new SqlCommand(query, Connection); DataReader = Command.ExecuteReader(); Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 9 List<Funcionario> lista = new List<Funcionario>(); while (DataReader.Read()) { Funcionario funcionario = new Funcionario();funcionario.IdFuncionario = Convert.ToInt32 (DataReader["IdFuncionario"]); funcionario.Nome = Convert.ToString (DataReader["Nome"]); funcionario.Salario = Convert.ToDecimal (DataReader["Salario"]); funcionario.DataAdmissao = Convert.ToDateTime (DataReader["DataAdmissao"]); lista.Add(funcionario); } return lista; } } } 2 - Camada de Regras de Negócio Biblioteca de Classes .NET Framework using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Projeto.Repository.Entities; using Projeto.Repository.Repositories; Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 10 namespace Projeto.Business { public class FuncionarioBusiness { //método para realizar o cadastro de um funcionario.. public string Cadastrar(Funcionario f) { FuncionarioRepository funcionarioRepository = new FuncionarioRepository(); try { funcionarioRepository.AbrirConexao(); funcionarioRepository.Inserir(f); return $"Funcionário {f.Nome}, cadastrado com sucesso."; } catch(Exception e) { //retornar mensagem de erro.. return "Erro ao cadastrar funcionário: " + e.Message; } finally { funcionarioRepository.FecharConexao(); } } } } Adicionando referencias no projeto MVC: Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 11 Criando uma classe de controle em MVC para gerar as páginas de cadastro e consulta de funcionarios: Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 12 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } } } Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 13 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Bem vindo ao Sistema</h1> <p> Aula de C# WebDeveloper - Asp.Net MVC </p> <hr/> <p> Escolha a operação desejada: </p> <a href="/Funcionario/Cadastro" class="btn btn-success"> Cadastrar Funcionários </a> <a href="" class="btn btn-primary"> Consultar Funcionários </a> </div> </body> </html> ---------------------------------------------- @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Cadastro</title> <!-- folha de estilo CSS --> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 14 <div class="container"> <h1>Cadastro de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr/> <p> Para cadastrar um funcionário, preencha os campos abaixo: </p> </div> </body> </html> -------------------------- Model (dados) São classes utilizadas em MVC para capturar dados de uma página (View), validar estes dados e entrega-los ao controller. Tambem são responsaveis por trazer dados dos controllers para exibição nas páginas. - Criando uma classe Model para representar os dados de cadastro do funcionario: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; //validação.. Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 15 namespace Projeto.Presentation.Models { public class FuncionarioCadastroModel { [Required(ErrorMessage = "Por favor, informe o nome do funcionário.")] public string Nome { get; set; } [Required(ErrorMessage = "Por favor, informe o salário do funcionário.")] public decimal Salario { get; set; } [Required(ErrorMessage = "Por favor, informe a data de admissão do funcionário.")] public DateTime DataAdmissao { get; set; } } } Criando o formulário de cadastro de Funcionario: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Cadastro</title> <!-- folha de estilo CSS --> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Cadastro de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr/> <p> Para cadastrar um funcionário, preencha os campos abaixo: </p> <br/> @model Projeto.Presentation.Models.FuncionarioCadastroModel @using (Html.BeginForm()) { <label>Nome do Funcionário:</label> <br/> @Html.TextBoxFor(model => model.Nome) Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 16 <br /><br /> <label>Salário:</label> <br/> @Html.TextBoxFor(model => model.Salario) <br /><br /> <label>Data de Admissão:</label> <br/> @Html.TextBoxFor(model => model.DataAdmissao) <br /><br /> <input type="submit" value="Cadastrar Funcionário" class="btn btn-success"/> } </div> </body> </html> -------------------------- Estilizando os campos do formulário: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Cadastro</title> <!-- folha de estilo CSS --> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Cadastro de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr/> <p> Para cadastrar um funcionário, preencha os campos abaixo: </p> <br/> @model Projeto.Presentation.Models.FuncionarioCadastroModel @using (Html.BeginForm()) { Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 17 <label>Nome do Funcionário:</label> <br/> @Html.TextBoxFor(model => model.Nome, new { @class = "form-controlcol-md-3" }) <br /><br /> <label>Salário:</label> <br/> @Html.TextBoxFor(model => model.Salario, new { @class = "form-control col-md-3" }) <br /><br /> <label>Data de Admissão:</label> <br/> @Html.TextBoxFor(model => model.DataAdmissao, new { @class = "form-control col-md-3", @type = "date" }) <br /><br /> <input type="submit" value="Cadastrar Funcionário" class="btn btn-success"/> } </div> </body> </html> Exibindo as mensagens de erro de validação: @{ Layout = null; } <!DOCTYPE html> Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 18 <html> <head> <meta name="viewport" content="width=device-width" /> <title>Cadastro</title> <!-- folha de estilo CSS --> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Cadastro de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr/> <p> Para cadastrar um funcionário, preencha os campos abaixo: </p> <br/> @model Projeto.Presentation.Models.FuncionarioCadastroModel @using (Html.BeginForm()) { <div class="text-danger"> @Html.ValidationSummary() </div> <label>Nome do Funcionário:</label> <br/> @Html.TextBoxFor(model => model.Nome, new { @class = "form-control col-md-3", @placeholder = "Informe o nome" }) <br /> <label>Salário:</label> <br/> @Html.TextBoxFor(model => model.Salario, new { @class = "form-control col-md-3", @placeholder = "Informe o salário" }) <br /> <label>Data de Admissão:</label> <br/> @Html.TextBoxFor(model => model.DataAdmissao, new { @class = "form-control col-md-3", @type = "date" }) <br /> <input type="submit" value="Cadastrar Funcionário" class="btn btn-success"/> } </div> </body> </html> Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 19 Enviando os dados do formulário para a classe de controle: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Cadastro</title> <!-- folha de estilo CSS --> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Cadastro de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr/> <p> Para cadastrar um funcionário, preencha os campos abaixo: </p> <br/> @model Projeto.Presentation.Models.FuncionarioCadastroModel @using (Html.BeginForm("CadastrarFuncionario", "Funcionario", FormMethod.Post)) { <div class="text-danger"> @Html.ValidationSummary() </div> <label>Nome do Funcionário:</label> <br/> @Html.TextBoxFor(model => model.Nome, new { @class = "form-control col-md-3", @placeholder = "Informe o nome" }) <br /> <label>Salário:</label> <br/> @Html.TextBoxFor(model => model.Salario, new { @class = "form-control col-md-3", @placeholder = "Informe o salário" }) <br /> <label>Data de Admissão:</label> <br/> @Html.TextBoxFor(model => model.DataAdmissao, Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 20 new { @class = "form-control col-md-3", @type = "date" }) <br /> <input type="submit" value="Cadastrar Funcionário" class="btn btn-success"/> } </div> </body> </html> Criando o método na classe de controle: FuncionarioController.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //nome da página return View("Cadastro"); } } } Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 21 Realizando o cadastro: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Projeto.Repository.Entities; //importando.. using Projeto.Business; //importando.. using Projeto.Presentation.Models; //importando.. namespace Projeto.Presentation.Controllers { public class FuncionarioController : Controller { // GET: Funcionario/Cadastro public ActionResult Cadastro() { return View(); } [HttpPost] //recebe uma requisição POST da página public ActionResult CadastrarFuncionario(FuncionarioCadastroModel model) { //verificar se os dados recebidos atraves da classe model //passaram nas regras de validação.. if(ModelState.IsValid) { Funcionario funcionario = new Funcionario(); funcionario.Nome = model.Nome; funcionario.Salario = model.Salario; funcionario.DataAdmissao = model.DataAdmissao; FuncionarioBusiness business = new FuncionarioBusiness(); string mensagem = business.Cadastrar(funcionario); //enviando a mensagem para a página.. ViewBag.Resultado = mensagem; } //nome da página return View("Cadastro"); } } } Na página: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Cadastro</title> Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 22 <!-- folha de estilo CSS --> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body> <div class="container"> <h1>Cadastro de Funcionários</h1> <a href="/Home/Index" class="btn btn-info btn-sm"> Voltar para página inicial </a> <hr/> <p> Para cadastrar um funcionário, preencha os campos abaixo: </p> <br/> @model Projeto.Presentation.Models.FuncionarioCadastroModel @using (Html.BeginForm("CadastrarFuncionario", "Funcionario", FormMethod.Post)) { <div class="text-danger"> @Html.ValidationSummary()</div> <label>Nome do Funcionário:</label> <br/> @Html.TextBoxFor(model => model.Nome, new { @class = "form-control col-md-3", @placeholder = "Informe o nome" }) <br /> <label>Salário:</label> <br/> @Html.TextBoxFor(model => model.Salario, new { @class = "form-control col-md-3", @placeholder = "Informe o salário" }) <br /> <label>Data de Admissão:</label> <br/> @Html.TextBoxFor(model => model.DataAdmissao, new { @class = "form-control col-md-3", @type = "date" }) <br /> <input type="submit" value="Cadastrar Funcionário" class="btn btn-success"/> <br/> <h3>@ViewBag.Resultado</h3> } </div> </body> </html> Treinamento em C# WebDeveloper Aula 08 Quarta-feira, 14 de Novembro de 2018 Desenvolvimento Orientado a Objetos em C# 23 Executando: ----------------------------------------------------
Compartilhar