C# - CRUD no SQL Server c/Dapper e MetroFramework usando um WebService - I
Neste artigo vamos criar uma aplicação Windows Forms onde vamos implementar as operações CRUD no banco de dados SQL Server usando o micro-ORM Dapper em um Web Service. |
A seguir vou mostrar como consumir o web service em nossa aplicação Windows Forms usando a linguagem C#.
Se você deseja ou precisa usar o estilo Metro em aplicações Windows Forms você pode usar o framework MetroFramework que fornece os recursos para criar interfaces nesse estilo de forma relativamente simples e gratuita. Veja o meu artigo sobre como usar o MetroFramework: VB .NET - Implementando interfaces ao estilo Metro com ... - Macoratti
Muitas vezes precisamos apenas criar uma aplicação básica com acesso a dados que faça apenas a manutenção dos dados e para isso não vale a pena usar uma ferramenta ORM como o Entity Framework ou NHibernate que são mais indicadas para projetos mais complexos. Uma solução, se você não quer usar ADO .NET puro é usar um micro ORM que apresenta recursos que vão facilitar o desenvolvimento e que tenha desempenho. É justamente aqui que o Dapper se encaixa. Veja o meu artigo sobre como usar o Dapper: ADO .NET - Usando o Micro ORM Dapper - Macoratti
Agora imagine um componente cujos recursos possam ser acessados na Internet via TCP/IP, independente do Sistema Operacional e de qualquer lugar como se o componente estivesse instalado na sua máquina ; um componente que não sofresse as restrições dos Firewalls e que fosse totalmente integrado ao seu ambiente. Estou falando de WebServices.
Não é uma ideia nova, já existem muitos sites que oferecem serviços como : cotações de ações , moedas , etc. ; o problema é que você tem que se adequar a cada um dos ambientes que oferecem o serviço.
A estratégia da Microsoft com a plataforma .NET esta focada na integração dos sistemas distribuídos na Web; na plataforma .NET ela oferece ferramentas para que a criação de serviços e sua distribuição na Web possa ser feita de forma rápida e simples.
E quanto ao protocolo de comunicação que permite a integração destes sistemas ? É aqui que entra o protocolo SOAP (Simple Object Access Protocol ). Ele é o responsável pela comunicação entre o cliente os sistemas e os serviços , pois permite que diferentes aplicações troquem dados de forma semelhante ao protocolo HTTP com GET e POST.
Embora os web services tenham evoluído e hoje em dia são usados como serviços REST neste artigo vou implementar o CRUD em um web service para gerenciar as informações de funcionários existentes em uma tabela do banco de dados SQL Server.
Para isso crei o banco Cadastro.mdf no SQL Management Studio e a tabela Funcionarios com a seguinte estrutura:
Também criei 2 procedimentos armazenados no SQL Server para realizar a edição e inclusão dos dados e assim mostrar como usar o recurso com o Dapper.
1-
Abaixo temos o código do procedimento armazenado:
sp_Funcionarios_Atualizar
USE [Cadastro]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[sp_Funcionarios_Atualizar]
(
@FuncionarioID int output,
@Nome nvarchar(100),
@Email nvarchar(150),
@Telefone nvarchar(50),
@Endereco nvarchar(150),
@Cargo nvarchar(50),
@ImagemUrl nvarchar(250)
)
as
update Funcionarios set Nome=@Nome, Email=@Email, Telefone=@Telefone, Endereco=@Endereco,
Cargo=@Cargo, ImagemUrl=@ImagemUrl
where FuncionarioID=@FuncionarioID
|
2- A
seguir temos o código do procedimento armazenado: sp_Funcionarios_Inserir
:
USE [Cadastro]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[sp_Funcionarios_Inserir]
(
@FuncionarioID int output,
@Nome nvarchar(100),
@Email nvarchar(150),
@Telefone nvarchar(50),
@Endereco nvarchar(150),
@Cargo nvarchar(50),
@ImagemUrl nvarchar(250)
)
as
insert into Funcionarios(Nome,Email,Telefone,Endereco,Cargo,ImagemUrl)
values(@Nome,@Email,@Telefone,@Endereco,@Cargo,@ImagemUrl)
set @FuncionarioID = SCOPE_IDENTITY()
|
Recursos Usados :
Criando o projeto Windows Forms e o Web Service no VS 2017
Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual C# e o template Windows Classic Desktop ->Windows Forms Application(.NET Framework)
Informe um nome a seu gosto. Eu vou usar o nome CRUD_Dapper. Esse será o nosso projeto Windows Forms.
A seguir vamos incluir um novo projeto onde teremos o Web Service em nossa solução.
No menu File clique em Add -> New Project e selecione Visual C# -> Web -> ASP .NET Web Application(.NET Framework), informe o nome CrudWebService, o local e clique em OK;
Selecione Empty e Web Forms , sem autenticação e clique em OK:
Ao final teremos uma solução contendo dois projetos:
Incluindo a referência ao Dapper e definindo o modelo de domínio e a string de conexão
Vamos incluir a referência à biblioteca Dapper em nosso projeto via Nuget.
No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;
A seguir informe dapper e clique em Browse;
Selecione o pacote encontrado, marque o projeto onde deseja instalar, e clique no botão Install; ( ( versão do Dapper v1.50.2)
Após isso vamos definir o nosso modelo de domínio. Para isso crie o arquivo Funcionario.cs na pasta Models do projeto e defina a classe Funcionario. O código segue abaixo:
public class Funcionario
{
public int FuncionarioID { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
public string Telefone { get; set; }
public string Endereco { get; set; }
public string Cargo { get; set; }
public string ImagemUrl { get; set; }
}
|
A seguir abra o arquivo Web.Config e inclua a string de conexão com o banco de dados SQL Server conforme abaixo:
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6"/>
<httpRuntime targetFramework="4.6"/>
</system.web>
.....
<connectionStrings>
<add name="ConexaoSqlServer" connectionString="Data Source=.\;Initial Catalog=Cadastro;
Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
|
Criando o Web Service e definindo os métodos CRUD
Com o projeto CrudWebService selecionado, no menu Project clique em Add New Item;
Selecione o template Web Service (ASMX), informe o nome FuncionarioService.asmx e clique em Add;
Será criado o arquivo FuncionarioService.asmx no projeto onde iremos implementar os métodos CRUD usando o Dapper. Vamos ao trabalho...
Abra o arquivo FuncionarioService.asmx e inclua os seguintes namespaces :
using Dapper;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web.Services;
A seguir defina os seguintes métodos:
1- Metodo Inserir() - Inclui um novo funcionário no banco de dados
[WebMethod]
public int Inserir(Funcionario ofunci)
{
using (IDbConnection db = new SqlConnection(ConfigurationManager.
ConnectionStrings["ConexaoSqlServer"].ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
DynamicParameters p = new DynamicParameters();
p.Add("@FuncionarioID", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.AddDynamicParams(new { Nome = ofunci.Nome, Email = ofunci.Email, Endereco = ofunci.Endereco,
Telefone = ofunci.Telefone, Cargo = ofunci.Cargo, ImagemUrl = ofunci.ImagemUrl });
int resultado = db.Execute("sp_Funcionarios_Inserir", p, commandType: CommandType.StoredProcedure);
if (resultado!=0)
return p.Get<int>("@FuncionarioID");
return 0;
}
}
|
O código obtém a string de conexão do arquivo web.config, abre a conexão e define os parâmetros a serem usados com a stored procedure sp_Funcionarios_Inserir e a executa incluindo o funcionário na tabela.
Note que usamos o atributo WebMethod no método Publico para indicar que você deseja que o método seja exposto como parte do Web Service XML. Você também pode usar as propriedades deste atributo para configurar o comportamento do método do Web Service. As propriedades disponíveis são : BufferResponse, CacheDuration, Description, EnableSession, MessageName e TransactionOption.
2- Metodo Update()
[WebMethod]
public bool Update(Funcionario ofunci)
{
using (IDbConnection db = new SqlConnection(ConfigurationManager.
ConnectionStrings["ConexaoSqlServer"].ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
int resultado = db.Execute("sp_Funcionarios_Atualizar", new { FuncionarioID = ofunci.FuncionarioID,
Nome = ofunci.Nome, Email = ofunci.Email, Endereco = ofunci.Endereco,
Telefone = ofunci.Telefone, Cargo = ofunci.Cargo,
ImagemUrl = ofunci.ImagemUrl }, commandType: CommandType.StoredProcedure);
return resultado != 0;
}
}
|
No método Update() usamos a stored procedure sp_Funcionarios_Atualizar para atualizar os dados de um funcionário.
3- Metodo GetAll()
[WebMethod]
public List<Funcionario> GetAll()
{
using (IDbConnection db = new SqlConnection(ConfigurationManager
.ConnectionStrings["ConexaoSqlServer"].ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
return db.Query<Funcionario>("Select * from Funcionarios", commandType: CommandType.Text).ToList();
}
}
|
No método GetAll() retorna todos os funcionários usando a instrução SQL - Select * from.
4- Metodo Delete()
[WebMethod]
public bool Delete(int funciID)
{
using (IDbConnection db = new SqlConnection(ConfigurationManager
.ConnectionStrings["ConexaoSqlServer"].ConnectionString))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
}
int resultado = db.Execute("delete from Funcionarios where FuncionarioID= @FuncionarioID",
new { FuncionarioID = funciID }, commandType: CommandType.Text);
return resultado != 0;
}
}
|
O método Delete() usa a instrução SQL - Delete from - para excluir um funcionário pelo seu ID.
Dessa forma implementamos os métodos CRUD em nosso web service para realizar a manutenção de dados no SQL Server.
Executando e testando o Web Service e obtendo o EndPoint
Com o nosso web service pronto vamos executá-lo e testar para ver se os métodos estão funcionando. Vamos também obter o EndPoint do nosso web service, que á o seu endereço URI de atendimento para podermos referenciar esse endereço no projeto Windows Forms para consumir o web service.
No menu Build clique em Rebuild Solution e verifique se não existem erros.
A seguir clique com o botão direito do mouse sobre o arquivo FuncinariosWebService.asmx e no menu suspenso escolha: Set As Start Page.
Depois clique com o botão direito do mouse sobre o arquivo FuncinariosWebService.asmx e no menu suspenso clique em View in Browser:
Veremos no navegador a exibição da página do nosso serviço atendendo no endereço : localhost:331/FuncionariosService.aspmx, conforme abaixo, exibindo os métodos implementados:
Para testar o método GetAll() clique no link na página. Fazendo isso teremos o seguinte resultado:
Clicando no botão Chamar que usa o protocolo HTTP POST iremos obter todos os funcionários atualmente cadastrados na tabela Funcionarios do banco de dados Cadastro:
Podemos repetir o procedimento para os demais métodos e ao final teremos que o nosso web service esta funcionando e pronto para ser consumido pela nossa aplicação Window Forms.
Na próxima parte do artigo iremos definir a interface com o usuário no projeto Windows Forms.
Está alguém entre vós aflito? Ore. Está alguém contente? Cante louvores. Tiago 5:13
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Implementando interfaces ao estilo Metro com ... - Macoratti