WCF - Inserindo dados no SQL Server
Este artigo apresenta o modo de inserir dados em SQL Server 2008 usando um serviço WCF a partir de código C#.
Para inserir dados em um banco de dados SQL Server usando um serviço WCF, devemos fazer realizar as seguintes ações:
Na primeira etapa, vamos criar um banco de dados e a tabela no SQL Server, depois disso criamos uma função simples para inserir dados no banco de dados usando um serviço WCF.
A seguir criaremos uma aplicação web onde vamos incluir uma referência ao serviço e aos dados a serem inseridos sendo que as informações serão enviados para a função de serviços e serão inseridos na tabela do banco de dados.
A aplicação exemplo foi desenvolvida no Visual Web Developer 2010 Express(VWD 2010) e no SQL Server 2008.
A tecnologia WCF - Windows Communication Foundation, surgiu com a .NET Framework 3.0 com o objetivo de unificar as até então existentes tecnologias de programação distribuidas como: COM+ , MSMQ-Message Queue, Enterprise Services, .NET Remoting e Web Services.
Com o advento da WCF foi criada uma plataforma com uma API que facilitou de forma considerável o desenvolvimento de aplicações distribuídas visto que o WCF não esta acoplado as regras de negócio que deverão ser expostas pelo serviço.
Para iniciar com o WCF existem alguns conceitos básicos que você deve conhecer para projetar, implementar e hospedar os seus serviços. Na verdade os templates WCF fornecidos no Visual Studio simplificam muito este processo visto que eles fornecem um serviço modelo que pode ser imediatamente hospedado e testado com as ferramentas de teste WCF. Assim chamar um serviço WCF a partir de um cliente é também uma tarefa simples , basta gerar um proxy e escrever o código contra o seu modelo de objetos.
Criando o banco de dados
Crie o banco de dados chamado Escola usando o SQL Server Management Studio e a seguir crie a tabela Acesso contendo os campos : id, login, senha e email:
O comando SQL para criar a tabela pode ser :
CREATE
TABLE [dbo].[Acesso]
(
[login] [varchar](50) NOT NULL,
[senha] [varchar](50) NOT NULL,
[email] [varchar](150) NOT NULL
)
Criando o serviço WCF
A seguir crie o projeto WCF usando o VWD 2010 com o nome WcfService_InserirDados_SQLServer;
Abra o VWD 2010 Express e no menu File clique em New Project;
Selecione a linguagem C# e o template WCF e a seguir WCF Service Application;
Informe o nome WcfService_InserirDados_SQLServer e clique em OK;
Será criado um projeto com a estrutura abaixo mostrada na janela Solution Explorer:
Vamos definir o contrato e o contrato de dados na interface IService conforme o código a seguir:
Lembre-se que a interface define apenas as assinaturas dos métodos que deverão ser implementados por uma classe concreta;
using System.ServiceModel; namespace WcfService_InserirDados_SQLServer { [ServiceContract] public interface IService1 { [OperationContract] string InserirUsuarios(Usuarios _usuario); } [DataContract] public class Usuarios { int _id; string _login = string.Empty; string _senha = string.Empty; string _email = string.Empty; [DataMember] public string Login { get { return _login; } set { _login = value; } } [DataMember] public string Senha { get { return _senha; } set { _senha = value; } } [DataMember] public string Email { get { return _email; } set { _email = value; } } [DataMember] public int ID { get { return _id; } set { _id = value; } } } } |
A primeira etapa para
criar um serviço WCF e efetuar a definição do
contrato pois é
o contrato Obs: O contrato é uma interface que
contém as assinaturas dos métodos que serão expostos. Contratos
de serviços (Service Contracts) - Descrevem as operações que um
serviço pode Contratos de Dados (Data
Contracts) -
Descreve a estrutura de dados usada no serviço. Um Data
Contract especifica para cada parâmetro ou tipo de
retorno qual informação será Definimos o contrato de serviço: InserirUsuarios e o contrato de dados Usuarios. Neste processo realizamos as seguintes tarefas:
|
Agora vamos implementar o método InserirUsuarios na classe Service1 no arquivo code-behind Service.svc digitando o código conforme abaixo:
using System.Data.SqlClient; namespace WcfService_InserirDados_SQLServer { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together. public class Service1 : IService1 { public string InserirUsuarios(Usuarios usuario) { string Mensagem; SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Escola;Integrated Security=True;"); con.Open(); SqlCommand cmd = new SqlCommand("insert into Acesso(login,senha,email) values(@Login,@Password,@Email)", con); cmd.Parameters.AddWithValue("@Login", usuario.Login); cmd.Parameters.AddWithValue("@Password", usuario.Senha); cmd.Parameters.AddWithValue("@Email", usuario.Email); int resultado = cmd.ExecuteNonQuery(); if (resultado == 1) { Mensagem = usuario.Login + " inserido com sucesso."; } else { Mensagem = usuario.Login + " não foi inserido."; } con.Close(); return Mensagem; } } } |
Pressione F5 para executar o serviço. Um formulário WCF Test Client será exibido e vai executar o serviço.
Agora clique duas vezes sobre o método InserirUsuarios() da interface IService1. A guia InserirUsuarios será exibida.
Após isso o serviço foi adicionado com êxito.
Vamos agora abrir o serviço no navegador, para isso com o botão direito do mouse clique sobre o arquivo service1.vcs e a seguir em View in Browser;
Copie a URL : http://localhost:58779/Service1.svc (no seu exemplo provavelmente a porta será diferente) para usá-la mais adiante.
Criando a aplicação WEB
Vamos criar a aplicação WEB que irá consumir o serviço WCF criado.
No menu File clique em Add -> New Project selecione o template ASP .NET Web Application e informe o nome AdicionarUsuarios;
Vamos incluir no projeto web a referência ao serviço WCF.
Clique com o botão direito do mouse sobre o Projeto Web e selecione o item Add Service Reference...
Será aberta a janela mostrada abaixo:
Vamos colar URL que copiamos quando abrimos o serviço no navegador na caixa de texto Address e clicar no botão Go:
Deveremos ver o serviço criado e na área Operations o método InserirUsuarios do serviço;
Clique no botão OK para incluir a referência no projeto:
Agora abra a página Default.aspx e digite o código abaixo para gerar a interface com usuário.
Iremos criar uma página com 3 campos para incluir os dados de login, senha e email na tabela Acesso;
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="InserirUsuariosWeb._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <div> <table width="84%" cellpadding="0" cellspacing="0" style="border: solid 1px #3366CC;"> <tr> <td colspan="4" style="height: 30px; background-color: #f5712b;"> <span class="TextTitle" style="color: #FFFFFF;">Formulário de Registro</span> </td> </tr> <tr> <td height="20px" colspan="0"> </td> </tr> <tr> <td width="50%" valign="top"> <table id="TableLogin" class="HomePageControlBGLightGray" cellpadding="4" cellspacing="4" runat="server" width="100%"> <tr> <td colspan="3" align="center"> <asp:Label ID="LabelMessage" ForeColor="Red" runat="server" EnableViewState="False" Visible="False"></asp:Label><br> </td> </tr> <tr style="font-weight: normal; color: #000000"> <td align="right"> <span>Login :</span>; </td> <td align="left" style="padding-left: 10px;"> <asp:TextBox ID="TextBoxUserName" runat="server" CssClass="textbox" Width="262px" MaxLength="50" Height="34px"></asp:TextBox> </td> </tr> <tr> <td align="right"> <span class="TextTitle">Senha :</span> </td> <td align="left" style="padding-left: 10px;"> <asp:TextBox ID="TextBoxPassword" runat="server" CssClass="textbox" Width="261px" MaxLength="50" TextMode="Password" Height="34px"></asp:TextBox> <br /> </td> </tr> <tr> <td align="right"> <span class="TextTitle">Email :</span> </td> <td align="left" style="padding-left: 10px;"> <asp:TextBox ID="TextBoxEmail" runat="server" CssClass="textbox" Width="261px" MaxLength="50" Height="34px"></asp:TextBox> <br /> </td> </tr> <tr> <td align="right"> </td> <td align="left" style="padding-left: 10px;"> <asp:Button ID="Button1" runat="server" Text="Inserir" OnClick="Button1_Click" Width="87px" /> <br /> </td> </tr> </table> </td> </tr> </table> </asp:Content> |
A aparência do formulário deverá ser a seguinte:
No evento Click do botão de comando inclua o código abaixo que irá instanciar o serviço criado e usar o método exposto para inserir dados no SQL Server;
using System; using InserirUsuariosWeb.ServiceReference1; namespace InserirUsuariosWeb { public partial class _Default : System.Web.UI.Page { ServiceReference1.Service1Client servicoReferencia = new ServiceReference1.Service1Client(); protected void Page_Load(object sender, EventArgs e) {} protected void Button1_Click(object sender, EventArgs e) { try { Usuarios _usuario = new Usuarios(); _usuario.Login = TextBoxUserName.Text; _usuario.Senha = TextBoxPassword.Text; _usuario.Email = TextBoxEmail.Text; string resultado = servicoReferencia.InserirUsuarios(_usuario); LabelMessage.Text = resultado; } catch (Exception ex) { LabelMessage.Text = ex.Message; } } } } |
Obtemos os dados do formulário e após criar uma instância do serviço usamos o método InserirUsuarios passando o objeto _usuarios com as informações para inclusão no SQL Server.
Execute a aplicação e a tela abaixo será apresentada. Informando alguns valores e clicando em Inserir:
Examinando o banco de dados Escola e a tabela Acesso com o SQL Server Management Studio veremos a informação gravada no banco de dados:
Vimos assim como é simples usar os recursos do WCF para gerenciar informações no SQL Server. Em outro artigo irei mostrar como realizar as operações CRUD usando um serviço WCF.
Pegue o projeto completo aqui: WcfService_InserirDados_SQLServer.zip
Aquele que vem de cima é sobre todos; aquele que vem da terra é da terra, e fala da terra. Aquele que vem do céu é sobre todos.Joã 3:31
Joã 3:32
Aquilo que ele tem visto e ouvido, isso testifica; e ninguém aceita o seu testemunho.Joã 3:33
Mas o que aceitar o seu testemunho, esse confirma que Deus é verdadeiro.Joã 3:34
Pois aquele que Deus enviou fala as palavras de Deus; porque Deus não dá o Espírito por medida.Joã 3:35
O Pai ama ao Filho, e todas as coisas entregou nas suas mãos.Joã 3:36
Quem crê no Filho tem a vida eterna; o que, porém, desobedece ao Filho não verá a vida, mas sobre ele permanece a ira de Deus.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#