Cadastre-se Revistas DevMedia Cursos
 

Space de EBENéZER DE SOUZA E SILVA
Busca Autor


Últimas 20 atualizações de EBENéZER DE SOUZA E SILVA

Artigo - Criando uma DLL de acesso a dados Genérica utilizando o namespace System.Data.Comom


Para facilitar a vida dos desenvolvedores com o novo modelo de provedor ADO.NET 2.0 nós podemos criar classes genéricas para acessar vários tipos de banco com a utilização da classe DbProviderFactory que através do nome do provedor passado na string de conexão ele identifica qual o banco utilizado e a partir daí criamos as classes DbConnection e DbCommand.

Vamos à prática. Abra o Visual Studio 2005 e crie um novo projeto Class Library como mostra a figura 1:

 

Figura 1 – Criando o Projeto

Após criar o projeto GenericDataBase exclua a classe que já vem como padrão Class1.cs do projeto e adicione uma nova pasta com o nome Configuration e dentro da pasta adicione uma nova classe com o nome ConnectionDB. Veja figura 2:

Figura 2 – Adicionando uma Classe

 

Antes de programarmos e falarmos sobre esta classe vamos adicionar outra pasta com o nome GenericDB e dentro dela a classe GenericDB.

A classe ConnectionDB deve ser declarada como publica e estática para que possamos ter acesso a ela e as suas propriedades sem ter que criar uma instância nova dela. Seu namespace deve ser alterado para GenericDataBase. Esta classe servirá apenas para armazenar a string de conexão e o nome do provedor que será utilizado no projeto. O código completo desta classe segue logo abaixo:

using System;

using System.Collections.Generic;

using System.Text;

using System.Configuration;

 

namespace GenericDataBase

{

    ///

    /// Classe de configuração da Conexão com o BD

    ///

    public static class ConnectionDB

    {

        ///

        /// Construtor Default

        ///

        static ConnectionDB()

        {

            try

            {

                // Recebe do arquivo de configuração Web.Config a string de conexão e o nome do provedor

                connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

                providerName = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;

            }

            catch

            {

                throw new Exception("Erro ao receber dados da Conexão. Por favor verifique se a string de conexão está declarada corretamente.");

            }        }

 

        ///

        /// Field String de Conexão

        ///

        private static string connectionString;

       

        ///

        /// Field Nome do Provedor

        ///

        private static string providerName;

 

        ///

        /// Propriedade que apenas informa a String de Conexão

        ///

        public static string ConnectionString

        {

            get

            {

                return connectionString;

            }

        }

 

        ///

        /// Propriedade que apenas informa o Nome do Provedor

        ///

        public static string ProviderName

        {

            get

            {

                return providerName;

            }

        }

    }

}

O código está todo comentado e isso deve ser uma obrigação de cada programador ao desenvolver seus códigos.

 

Veja que no construtor default da classe eu faço uso da Classe ConfigurationManager para pegar a string de conexão no arquivo Web.Config e para isso não devemos esquecer de declarar seu namespace no início da classe :

using System.Configuration;

 

Obs.: Para utilização desta DLL será necessário declarar a string de conexão no arquivo Web.Config no seu projeto como ConnectionString.

Antes de programarmos a classe GenericDB vamos definir quais os tipos de comando que a DLL irá executar no banco de dados. Para isso vamos criar uma nova classe no projeto com o nome TypeCommand. Altere a declaração de class para enum igual está o código abaixo:

namespace GenericDB

{

    ///

    /// Tipos de Commandos a serem

    /// executados no BD

    ///

    public enum TypeCommand

    {

        ExecuteNonQuery,

        ExecuteReader,

        ExecuteScalar,

        ExecuteDataTable

    }

}

Abra a classe GenericDB e faça sua declaração da mesma forma que a classe ConnectionDB (Public e Static). Segue o código da declaração da classe:

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.Common;

using System.Data;

 

namespace GenericDataBase

{

    ///

    /// Classe de execução de comandos no BD

    ///

    public static class GenericDB

    {

        ///

        /// Construtor Default

        ///

        static GenericDB()

        {

            //

            // TODO: Add constructor logic here

            //

        }

    }

 

}

Vamos agora adicionar um método para criar os objetos DbConnection e DbCommand utilizando o Factory de acordo com o nome de provedor passada na string de conexão. O código deste método comentado segue logo abaixo:

///

        /// Método que Cria um objeto DBCommand com os dados

        /// da classe ConnectionDB utilizando Factory

        ///

        /// DBCommand criado

        public static DbCommand createCommand(String cmmdText, CommandType cmmdType, List<DbParameter> listParameter)

        {

            // Cria um novo factories de acordo com o nome do provedor

            DbProviderFactory factory = DbProviderFactories.GetFactory(ConnectionDB.ProviderName);

           

            // Cria um objeto específico de conexão de acordo com o nome do provedor

            DbConnection conn = factory.CreateConnection();

           

            // Atribui a String de Conexão

            conn.ConnectionString = ConnectionDB.ConnectionString;

           

            // Cria um objeto command específico de acordo com o nome do provedor

            DbCommand comm = conn.CreateCommand();

 

            // Atribui o comando Text

            comm.CommandText = cmmdText;

            // Atribui o tipo de comando

            comm.CommandType = cmmdType;

 

            // Se existir algum parâmetro ele adiciona

            // ao comando

            if (listParameter != null)

            {

                foreach (DbParameter param in listParameter)

                {

                    // Adicionando o parâmetro

                    comm.Parameters.Add(param);

                }

            }           

            // Retorna o comando criado

            return comm;

        }

 

Este método recebe três parâmetros, o primeiro serve para receber um comando SQL ou o nome da stored procedure o segundo é o tipo de comando (Stored Procedure ou Text) e o terceiro é uma lista de parâmetros. Irei mostrar depois como criar essa lista de parâmetros, pois será necessário criar um método para criar os parâmetros. Não esqueça de fazer referência ao namespace System.Collections.Generic para poder fazer uso das Listas Genéricas.

Repare o uso da classe DbProviderFactory. Com ela eu crio um factory recebendo da classe ConnectionDB o nome do provedor.

DbProviderFactory factory = DbProviderFactories.GetFactory(ConnectionDB.ProviderName);

E é através deste factory criado que eu crio os objetos de conexão

DbConnection conn = factory.CreateConnection();

e de comando

DbCommand comm = conn.CreateCommand();

Após criado o comando eu atribuo ao comando o comando a ser executado (cmmdText) e o tipo de comando (cmmdType).

Para adicionar os parâmetros ao comando eu verifico se a lista não é nula. Se não for eu percorro toda a lista de parâmetros e adiciono cada um ao comando.

    // Se existir algum parâmetro ele adiciona

            // ao comando

            if (listParameter != null)

            {

                foreach (DbParameter param in listParameter)

                {

                    // Adicionando o parâmetro

                    comm.Parameters.Add(param);

                }

            }

Vamos agora ao método para criar parâmetros. Nós sabemos que todo parâmetro sempre tem o nome, tipo e valor, então vamos criar um método que recebe como parâmetro essas três variáveis. Veja o método abaixo:

///

        /// Método responsável por criar um Parâmetro

        ///    

        ///         List param = new List();

        ///         param.Add(criaParameter(nome, tipo, valor));

        ///    

        ///

        /// Nome do Parâmetro

        /// Tipo do Parâmetro

        /// Valor do Parâmetro

        /// Parâmetro preenchido

        public static DbParameter criaParameter(String nameParameter, DbType typeParameter, Object valueParameter)

        {

            // Cria um novo factories de acordo com o nome do provedor

            DbProviderFactory factory = DbProviderFactories.GetFactory(ConnectionDB.ProviderName);

 

            // Cria o Parâmetro e add seu valores

            DbParameter param = factory.CreateParameter();

            param.ParameterName = nameParameter;

            param.DbType = typeParameter;

            param.Value = valueParameter;

 

            // Retorna o Parâmetro criado

            return param;

        }

 

            Este método é bem simples mas o principal detalhe é que para criar o DbParameter eu devo utilizar o factory também.

DbParameter param = factory.CreateParameter();

 

Depois é só adicionar os valores ao parâmetro e retorná-lo.

Na hora de utilizar a DLL você deverá fazer assim:

List param = new List();

param.Add(criaParameter(nome1, tipo1, valor1));

param.Add(criaParameter(nome2, tipo2, valor2));

param.Add(criaParameter(nome3, tipo3, valor3));

E assim pra quantos parâmetros tiver.

Agora vamos ao último método e o mais importante que é o método de execução. Ele receberá os mesmos parâmetros do método createCommand e mais um que é o tipo de comando a ser executado. Segue o método:

///

        /// Método que cria um comando e executa esse comando.

        ///

        /// String SQL ou StoredProcedure

        /// Tipo de Commando (Text ou Stored Procedure

        /// Lista de parâmetros

        /// Comando a ser executado (ExecuteNonQuery, ExecuteReader, ExecuteScalar, ExecuteDataTable)

        /// Object

        public static Object executeCommand(String cmmdText, CommandType cmmdType, List<DbParameter> listParameter, TypeCommand typeCmmd)

        {

            // Cria comando com os dados passado por parâmetro

            DbCommand command = CreateCommand(cmmdText, cmmdType, listParameter);

 

            // Cria objeto de retorno

            Object objRetorno = null;

 

            try

            {

                // Abre a Conexão com o banco de dados

                command.Connection.Open();

 

                switch (typeCmmd)

                {

                    case TypeCommand.ExecuteNonQuery:

                        // Retorna o número de linhas afetadas

                        objRetorno = command.ExecuteNonQuery();

                        break;

                    case TypeCommand.ExecuteReader:

                        // Retorna um DbDataReader

                        objRetorno = command.ExecuteReader(CommandBehavior.CloseConnection);

                        break;

                    case TypeCommand.ExecuteScalar:

                        // Retorna um objeto

                        objRetorno = command.ExecuteScalar();

                        break;

                    case TypeCommand.ExecuteDataTable:

                        // Cria uma tabela

                        DataTable table = new DataTable();

                        // Executa o comando e salva os dados na tabela

                        DbDataReader reader = command.ExecuteReader();

                        table.Load(reader);

                        // Fecha o Reader

                        reader.Close();

                        // Retorna a tabela

                        objRetorno = table;

                        break;

                }

            }

            catch (Exception ex)

            {

                throw ex;

            }

            finally

            {

                if (typeCmmd != TypeCommand.ExecuteReader)

                {

                    // Sempre fecha a conexão com o BD

                    command.Connection.Close();

                }

            }

 

            return objRetorno;

        }

A primeira coisa a fazer neste método é chamar o método que criamos para criar o comando: DbCommand command = CreateCommand(cmmdText, cmmdType, listParameter);

Este mesmo método servirá para excutar todos os tipos de comando no banco de dados e para cada comando ele retorna um objeto diferente, veja tabela abaixo:

Comando

Objeto

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
21/12/2007 17:29:00





Artigo - Pesquisando informações que estejam entre as datas Informadas com Stored Procedure.


Vamos criar um cadastro de eventos e após cadastrar vamos pesquisá-los por Data. Ok!

 

Crie um novo Web Site e adicione um banco de dados Sql Server express com o nome que desejar, no meu caso coloquei Agenda_DB.mdf.

Segue imagem:

 

bancoPesByData.JPG

1 - Figura 1

 

Vamos criar as Stored Procedure para adicionar um evento e para pesquisar entre as datas informadas pelo usuário. Adicione uma nova procedure com o nome agenda_AddEvento e digite o seguinte código.

 

CREATE PROCEDURE agenda_AddEvento

     

      @titulo nvarchar(50),

      @evento nvarchar(50),

      @data datetime

     

AS

     

INSERT INTO TBAgenda (Titulo, Evento, Data) values (@titulo, @evento, @data)

     

RETURN

 

2 - Stored Procedure para Adicionar Evento

 

Adicione outra Stored Procedure para pesquisar os eventos entre as datas.

Segue o código:

 

CREATE PROCEDURE agenda_GetEvento

     

      --Data Inicial para pesquisa

      @dataIni datetime,

      --Data Final para pesquisa

      @dataFin datetime

     

AS

     

      SELECT Titulo, Evento, Data FROM TBAgenda

     

      --Condição para pesquisar entre as datas informadas

      --e ordenar os resultados por data

      WHERE (Data > @dataIni AND Data < @dataFin) ORDER BY Data

     

RETURN

3 - Stored Procedure para Pesquisar Evento

 

Agora vamos criar o Layout da aplicação:

Na página Default.aspx adicione dois Panels, um para salvar o evento e outro para fazer a pesquisa.

 

Segue o código do Panel para Adicionar o Evento.

 

<asp:Panel ID="pnlInserir" runat="server">

  <table>

    <tr>

      <td>Título: </td>

      <td>

          <asp:TextBox ID="txtTitulo" runat="server"></asp:TextBox>

       </td>

    </tr>

    <tr>

       <td>Evento: </td>

       <td>

          <asp:TextBox ID="txtEvento" TextMode="MultiLine" runat="server" Height="73px" Width="214px"></asp:TextBox>

       </td>

    </tr>

    <tr>

      <td>Data:</td>

      <td>

        <asp:TextBox ID="txtData" runat="server"></asp:TextBox>

      </td>

   </tr>

   <tr>

       <td align="right" colspan="2">

          <asp:Button ID="btnSalvar" runat="server" Text="Salvar" OnClick="btnSalvar_Click" />

          <asp:LinkButton ID="lnkPesquisar" runat="server" Text="Pesquisar" OnClick="lnkPesquisar_Click" />

       </td>

   </tr>

</table>

</asp:Panel>

 

No Panel para fazer a pesquisa teremos apenas dois TextBox para informar as datas inicias para pesquisa e data final de pesquisa, o botão pesquisar e o botão voltar e um GridView para mostrar o resultado.

Segue código HTML:

 

<asp:Panel ID="pnlPesquisa" runat="server" Visible="false">

  <table>

    <tr>

      <td>Data Inicial: </td>

      <td>

         <asp:TextBox ID="txtData1" runat="server"></asp:TextBox>

      </td>

      <td>Data Final: </td>

      <td>

         <asp:TextBox ID="txtData2" runat="server"></asp:TextBox>

      </td>

   </tr>

    <tr>

       <td colspan="4">

          <asp:Button ID="btnPesquisar" runat="server" Text="Pesquisar" OnClick="btnPesquisar_Click" />

    

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
15/06/2007 09:43:00





Artigo - Utilizando o controle ImageMap do Asp.NET 2.0


Pra começar vou falar em qual situação pode ser utilizado o controle ImageMap.

Vamos supor que você tem uma imagem no seu site e quando você clicar na parte superior da imagem dispare um valor e ao clicar na parte inferior dispare outro valor ou na parte superior redirecione para uma tela e na parte inferior redirecione para outra tela, com o controle ImageMap você pode fazer isso. Neste artigo irei mostrar como fazer esses dois exemplos.

 

Vamos lá, crie um novo Web Site e na página Default adicione um controle ImageMap.

Como nós iremos utilizar uma imagem, adicione uma imagem ao seu projeto, para isso clique com o botão direito do mouse em cima do projeto e em Add Existing Item e selecione a imagem Por-do-Sol na pasta amostra de imagens como mostra a figura abaixo:

 

 

imagemMap.JPG

 

O código html para o nosso controle deve ficar da seguinte forma:

 

<asp:ImageMap ID="Imagemap1" runat="server" ImageUrl="~/Pôr-do-sol.jpg" Height="300" Width="300" OnClick="Imagemap1_Click" HotSpotMode="PostBack">

               

<asp:RectangleHotSpot Top="0" Bottom="150" Left="0" Right="300" PostBackValue="Parte de Cima" />

               

<asp:RectangleHotSpot Top="151" Bottom="300" Left="0" Right="300" PostBackValue="Parte de Baixo" />

</asp:ImageMap>

 

Note que na propriedade HotSpotMode foi informado PostBack o que quer dizer que ao ao clicar na imagem irá entrar no método OnClick dá imagem. Veja que dentro do objeto ImageMap foi acrescentado o ítem RectangleHotSpot  para configurar em qual lugar da figura irá acionar o postback através das propriedades Top/Bottom e Left/Right e para o  valor nós vamos informar na propriedade PostBackValue.

 

Para que funcione esse nosso exemplo, no método OnClick do controle ImageMap adicione o seguinte código para escrever na tela em qual parte da imagem nós clicamos.

 

 

protected void Imagemap1_Click(object sender, ImageMapEventArgs e)

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
24/05/2007 11:05:00





Artigo - Criar um post de Mensagens sem utilizar banco de dados e sim arquivos.


Olá a todos, neste artigo irei mostrar como criar um arquivo, escrever nele e depois carrega-los em um GridView.

Vamos criar um espaço para que o usuário digite uma mensagem no seu site e ao invés de salvar as informações em um banco de dados vamos criar um arquivo e salvar a mensagem neste arquivo. Depois vamos listar todas as mensagens enviadas para você.

Utilizarei o conceito de generics também, que vocês já devem conhecer. Ok!

 

Vamos lá, crie um novo WebSite. Adicione uma nova pasta no site com o nome Mensagens para onde enviarei os arquivos com as mensagens.

 

Monte a tela da seguinte forma.

 

 

imagem1.JPG

 

Código HTML do GridView

 

<asp:GridView ID="grdMsg" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal" ShowHeader="False">

<FooterStyle BackColor="White" ForeColor="#333333" />

<RowStyle BackColor="White" ForeColor="#333333" />

<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />

<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />

<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />

<Columns>

            <asp:TemplateField>

                  <ItemTemplate>

                        Enviada por:

                        <%# Eval("Nome")%>

                        <br />

                        <b>

                            <%# Eval("Msg") %>

                        </b>

                        <br />

                        Data de Envio:

                        <%# Eval("DT_Envio") %>

                 </ItemTemplate>

             </asp:TemplateField>

         </Columns>

 </asp:GridView>

 

Vamos criar uma classe Mensagem. Segue:

 

using System;

 

/// <summary>

/// Summary description for Mensagem

/// </summary>

public class Mensagem

{

      public Mensagem()

      {

      }

 

    private string nome;

    private string msg;

    private DateTime dtEnvio;

 

    public string Nome

    {

        get { return nome; }

        set { nome = value; }

    }

      

    public string Mensagem

    {

        get { return msg; }

        set { msg = value; }

    }

 

    public DateTime DT_Envio

    {

        get { return dtEnvio; }

        set { dtEnvio = value; }

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
11/05/2007 17:20:00





Artigo - Adicionar primeiro dados em um GridView e depois na base de dados usando Transaction.


Bom dia a todos, hoje em dia em nossas aplicações é comum fazer inserções em banco de dados e mostrar os dados em um GridView após a inserção. O objetivo deste artigo é mostrar como fazer para adicionar primeiro os valores em um gridview e depois de ter inserido quantas linhas quiserem no grid, adicionar todas elas na base de dados. Isso seria bastante prático em um cadastro de funcionário, onde pudesse informar vários telefones para cada funcionário cadastrado. Irei utilizar o VS 2005 com o sql server express 2005

Vou utilizar neste exemplo uma tabela simples de telefone onde o usuário pode informar o ddd, número e o tipo de telefone.

 

Primeiro vamos criar um banco de dados e uma tabela como a imagem abaixo:

 

banco.JPG

 

O layout da tela é esse:

 

post1.JPG

 

 

Código HTML:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<table>

<tr>

<td colspan="2">

<hr>

Informe vários telefones:<br />

<br />

</td>

</tr>

<tr>

<td valign="top" style="width: 151px">

DDD:

</td>

<td style="width: 101%">

<asp:TextBox ID="txtDDD" runat="server" MaxLength="3" Width="30px"></asp:TextBox></td>

</tr>

<tr>

<td valign="top" style="width: 151px">

Número:

</td>

<td style="width: 101%">

<asp:TextBox ID="txtNumero" runat="server" MaxLength="8" Width="130px"></asp:TextBox></td>

</tr>

<tr>

<td valign="top" style="width: 151px">

Tipo:

</td>

<td style="width: 101%">

<asp:DropDownList ID="dropTipo" runat="server">

<asp:ListItem>Selecione</asp:ListItem>

<asp:ListItem>Residência</asp:ListItem>

<asp:ListItem>Celular</asp:ListItem>

<asp:ListItem>Trabalho</asp:ListItem>

</asp:DropDownList></td>

</tr>

<tr>

<td>

<asp:Button ID="btnAddTelefone" runat="server" Text="Adicionar" OnClick="btnAddTelefone_Click" />

</td>

<td>

</td>

</tr>

<tr>

<td colspan="2">

<br />

<asp:GridView ID="grdTelefones" runat="server" AutoGenerateColumns="False" CellPadding="4"

GridLines="Horizontal" BorderColor="#336666" BorderStyle="Double" Width="278px"

OnRowDeleting="grdTelefones_RowDeleting" BackColor="White" BorderWidth="3px">

<FooterStyle BackColor

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
11/05/2007 10:50:00





 

Ebenézer está cursando Superior em Bacharelado em Sistemas de informação e é desenvolvedor de sites e aplicações web na plataforma .NET. Atua como programador na Corretora de Seguros BRB e escreve artigos para o portal DevMedia e a comunidade aspneti.com.
Arquivo de atualizações
 2007

Estatísticas do Autor:
Número de posts: 6
Características dos posts deste autor:
Conteúdo:
Utilidade:
10 0
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group