Eder S. Silva

13set/110

Formatando Colunas do GridView (LINQ)

Boa noite povo...

Antes de qualquer coisa venho pedir desculpa o meu sumiço esses dias, por conta do casamento que está chegando...
Esses dias tenho ajudado alguns tópicos do fórum MSDN referente a formatação de colunas do GridView como Data e valores monetários, vou mostrar um exemplo bem simples não vou nem utilizar Banco de dados. Iremos criar uma classe com algumas propriedades e logo em segue iremos carregar com alguns valores.
A primeira coisa vamos criar uma classe Produtos onde vão conter algumas propriedades como ID, NOME PRODUTO, QTDE, DATA VENCIMENTO, PRECO.

class Produtos
{
public int idProduto { get; set; }
public string nomeProduto { get; set; }
public int qtde { get; set; }
public DateTime dataVencimento { get; set; }
public double precoProduto { get; set; }
}

Vamos agora criar um método estático onde vai retornar uma lista de produtos.

static List GetProdutos()
{
return new List()
{
new Produtos { idProduto = 1, nomeProduto = "Café", dataVencimento = Convert.ToDateTime("21/09/2011"), precoProduto = 3.50, qtde = 10},
new Produtos { idProduto = 2, nomeProduto = "Açucar", dataVencimento = Convert.ToDateTime("20/08/2011"), precoProduto = 2.50, qtde = 150},
new Produtos { idProduto = 3, nomeProduto = "Arroz", dataVencimento = Convert.ToDateTime("10/09/2011"), precoProduto = 8.50, qtde = 200},
new Produtos { idProduto = 4, nomeProduto = "Feijão", dataVencimento = Convert.ToDateTime("11/09/2011"), precoProduto = 6.50, qtde = 2000},
new Produtos { idProduto = 5, nomeProduto = "Sal", dataVencimento = Convert.ToDateTime("01/06/2011"), precoProduto = 33.50, qtde = 30},
new Produtos { idProduto = 6, nomeProduto = "Farinha", dataVencimento = Convert.ToDateTime("21/10/2011"), precoProduto = 453.50, qtde = 12},
new Produtos { idProduto = 7, nomeProduto = "Sabão", dataVencimento = Convert.ToDateTime("23/12/2011"), precoProduto = 369.50, qtde = 15},
new Produtos { idProduto = 8, nomeProduto = "Água Sanitária", dataVencimento = Convert.ToDateTime("15/08/2011"), precoProduto = 0.50, qtde = 59},
new Produtos { idProduto = 9, nomeProduto = "Papel Higiênico", dataVencimento = Convert.ToDateTime("11/07/2011"), precoProduto = 12.50, qtde = 60},
new Produtos { idProduto = 10, nomeProduto = "Shampoo", dataVencimento = Convert.ToDateTime("02/06/2011"), precoProduto = 10.00, qtde = 37},
new Produtos { idProduto = 11, nomeProduto = "Condicionador", dataVencimento = Convert.ToDateTime("03/09/2011"), precoProduto = 0.75, qtde = 4567},
new Produtos { idProduto = 12, nomeProduto = "Sabonete", dataVencimento = Convert.ToDateTime("20/11/2011"), precoProduto = 3.86, qtde = 7895},
new Produtos { idProduto = 13, nomeProduto = "Escova de Dente", dataVencimento = Convert.ToDateTime("24/05/2011"), precoProduto = 8.99, qtde = 12345},
new Produtos { idProduto = 14, nomeProduto = "Pasta de Dente", dataVencimento = Convert.ToDateTime("16/04/2011"), precoProduto = 123.50, qtde = 12578},
new Produtos { idProduto = 15, nomeProduto = "Fio Dental", dataVencimento = Convert.ToDateTime("20/08/2011"), precoProduto = 22.80, qtde = 96547}
};
}

Depois de carregar alguns produtos vamos adicionar dois GridView em nossa pagina Default.aspx. Neste exemplo renomeei a GridView1 de gridEstudo1 e o GridView2 de gridEstudo2.
O nosso gridEstudo1 vai ficar assim:


    
        
        
        
        
            
                
            
        
        
            
                
            
        
        
        
        
    

Perceba que mudei a propriedade AutoGenareteColumns para false e adicionei oito colunas onde mostro como mudar a formatação dos campos data de três formas diferentes e o preço de duas.
No Default.cs vamos adicionar o método para carregar o gridEstudo1:

private void FormatandoCamposGrid()
{
gridEstudo1.DataSource = GetProdutos();
gridEstudo1.DataBind();
}

No gridEstudo2 vai ficar assim:
Neste gridEstudo2 vamos formatar as mesmas colunas da grid anterior mais vamos fazer com LINQ (Language Integrated Query) , vamos adicionar este código no cs.

private void FormatandoCamposLINQ()
{
var prod = from p in GetProdutos()
select new
{
ID = p.idProduto,
Produto = p.nomeProduto,
Data_Vencimento1 = string.Format("{0:dd/MM/yyyy}", p.dataVencimento),
Data_Vencimento2 = string.Format("{0:dd/MMMM/yy}", p.dataVencimento),
Data_Vencimento3 = string.Format("{0:dd/MMM/yy}", p.dataVencimento),
Preço_1 = string.Format("{0:c2}",p.precoProduto),
Preço_2 = string.Format("{0:n1}", p.precoProduto),
Qtde = p.qtde
};
gridEstudo2.DataSource = prod;
gridEstudo2.DataBind();
}

Depois de codificarmos os métodos de Carregar a gridEstudo1 e gridEstudo2 vamos chamar estes métodos no Page_Load do default.cs:

protected void Page_Load(object sender, EventArgs e)
{
FormatandoCamposGrid();
FormatandoCamposLINQ();
}

Perceba que não me atentei em nenhuma metodologia pois o objetivo não era este. Rode a sua aplicação e perceba que o mesmo está funcionando corretamente.
Espero ter ajudado !!!
Até a próxima...

Download Projeto Aqui.

13ago/111

Adicionando uma coluna AutoIdentity (Auto Numérico) no DataTable.

Boa Noite pessoal, hoje começar a mostrar algumas propriedades bem interessantes do objeto DataTable.
Vou começar mostrando pra vocês como adicionar um campo AutoIdentity mais conhecido como Auto Numérico, usado muito para campos do tipo Chave primária no SQL Server. O objetivo é apenas mostrar como adicionar a Coluna AutoIdentity no objeto DataTable .
Vamos lá mão na massa.
Neste Exemplo o nosso layout vai ser bem simples, adicionei um GridVIew e alterei o nome dele para gridTeste onde vão ser mostrado os dados.

No Código CS da pagina vamos adicionar dois métodos.

private void CarregaGrid()
{
try
{
DataTable objDt = new DataTable("Tb_Usuarios");
SqlConnection objConn = new SqlConnection(
@"Data Source=EDERDANDAN-PC\SQLSERVER_2008R2;Initial Catalog=DB_BLOG;
Persist Security Info=True;User ID=ederssilva;Password=senha1");
SqlDataAdapter objDataAdapter = new SqlDataAdapter(
@"SELECT nome, email, data_nascimento FROM dbo.TB_USUARIOS", objConn);
objDt = AddColunaId(objDt);
objDataAdapter.Fill(objDt);

gridTeste.DataSource = objDt;
gridTeste.DataBind();
}
catch (Exception ex)
{
throw ex;
}
}

private DataTable AddColunaId(DataTable objDt)
{
try
{
//Instanciamos um DataColum e já adicionei o nome da coluna "ID"
DataColumn objColuna = new DataColumn("ID");

//Por padrão a propriedade AutoIncrement é false
//Setamos o AutoIncrement como true dizendo que vai ser auto increment
objColuna.AutoIncrement = true;

//Por padrão o AutoIncrementSeed se inicia em 0
//Setamos ele como 1
objColuna.AutoIncrementSeed = 1;

//Passamos o que o tipo da coluna vai ser Int32
objColuna.DataType = typeof(Int32);

//Adicionamos nossa coluna ID no DataTable
objDt.Columns.Add(objColuna);

//Retornamos o DataTable
return objDt;
}
catch (Exception ex)
{
throw ex;
}
}

Verifique que o método CarregaGrid está encarregado de retornar os dados do Banco e chamar o outro método AddColunaId que adiciona a coluna ID no DataTable e retorna o DataTable para depois ser carregada com os dados do Banco. Ao rodar a aplicação verificamos que o nosso pequeno exemplo funciona perfeitamente.

Por hoje é só espero ter ajudado vocês com este pequeno exemplo de como implementar o AutoIdentity .
Até as próximos tópicos sobre as propriedades e métodos do objeto DataTable
Bom estudo pra vocês até a próxima...

21jul/110

Inserindo um DataTable no Banco

Boa Noite Pessoal...

Hoje aprendi como meu amigo Vagner e vou compartilhar com vocês, um método simples de como inserir um DataTable sem precisar inserir linha a linha no Banco de Dados.
Imagine que você esteja criando uma rotina de copiar os registros de uma tabela e gostaria de inserir em outra tabela de outro banco.
Vamos criar duas tabelas e ler uma e inserir na outra.

Segue o script de criação das tabelas:

CREATE TABLE [dbo].[TB_TESTE_ORIGEM]
(
[campo1] [varchar](50) NULL,
[campo2] [varchar](50) NULL,
[campo3] [varchar](50) NULL,
[campo4] [varchar](50) NULL
)

INSERT INTO TB_TESTE_ORIGEM VALUES
('TESTE1','TESTE2','TESTE3','TESTE4'),
('TESTE4','TESTE3','TESTE2','TESTE1'),
('TESTE1','TESTE2','TESTE3','TESTE4'),
('TESTE4','TESTE3','TESTE2','TESTE1'),
('TESTE1','TESTE2','TESTE3','TESTE4'),
('TESTE4','TESTE3','TESTE2','TESTE1'),
('TESTE1','TESTE2','TESTE3','TESTE4'),
('TESTE4','TESTE3','TESTE2','TESTE1')

CREATE TABLE [dbo].[TB_TESTE_DESTINO]
(
[campo1] [varchar](50) NULL,
[campo2] [varchar](50) NULL,
[campo3] [varchar](50) NULL,
[campo4] [varchar](50) NULL
)

Apenas criamos a tabela TB_TESTE_ORIGEM e inserimos alguns registros.
Depois de criado as duas tabelas vamos inserir os dados da tabela TB_TESTE_ORIGEM na TB_TESTE_DESTINO.

//Carrega DataTable
private static void GetTable()
{
SqlConnection objConn = new SqlConnection(@"Data Source=LOCAL;
Initial Catalog=DB_TESTE;Integrated Security=True");
SqlCommand objComm = new SqlCommand("SELECT * FROM TB_TESTE_ORIGEM ", objConn);
DataTable objDt = new DataTable();
SqlDataAdapter objAdapter = new SqlDataAdapter(objComm);
objAdapter.Fill(objDt);
SetTable(objDt);
}

//Inseri DataTable carregado no banco
private static void SetTable(DataTable objDt)
{
SqlConnection objConn = new SqlConnection(@"Data Source=LOCAL;
Initial Catalog=DB_TESTE;Integrated Security=True");
SqlBulkCopy objBCopy = new SqlBulkCopy(objConn);
objBCopy.DestinationTableName = "dbo.TB_TESTE_DESTINO";
objConn.Open();
objBCopy.WriteToServer(objDt);
objConn.Close();
}

No método GetTable esta selecionando os dados para depois passar como parâmetro no método SetTable e assim inserir no banco.
Estamos usando o SqlBulkCopy que é um comando de inserção de dados em massa.
No SqlBulkCopy temos que passar a string de conexão o nome da Tabela onde
vamos inserir e o DataTable passado como parâmetro.

Muita gente já deve ter inserido linha a linha no banco e percebeu que com um volume muito grande de informação a aplicação fica muito lenta, com este método vai ganhar no desempenho em suas aplicações.
Por Hoje é só pessoal....

4jul/110

Mascara e Validações no ASP.NET

Boa noite pessoal...
Hoje vou mostrar algumas mascaras e validações em Java script de alguns campos muito encontrados em telas de cadastro, tela de contatos entre outras.
É bem simples, pois é apenas um guia de consulta destas funções clássicas do Java script.

Vamos criar um projeto Asp.Net em C# com o nome “Mascara_Campos_Blog”.

Criei uma pasta scripts onde vamos criar dois itens “JScript File” onde vai ficar as funções de validações e outro com funções de mascara.

Adicione as funções abaixo na Mascara.js que criamos anteriormente.

function MascaraTelefoneComDdd(obj)
{
   var mask;
   mask = obj.value;

   if (mask.length == 1) { mask = '(' + mask; }
   if (mask.length == 3) { mask = mask + ')'; }
   if (mask.length == 4) { mask = mask + " "; }
   if (mask.length == 9) { mask = mask + '-'; }

   obj.value = mask;
}

function MascaraTelefoneSemDdd(obj)
{
    var mask;
    mask = obj.value;
    if (mask.length == 4) { mask = mask + '-'; }
    obj.value = mask;
}

Baixe aqui o arquivo Mascara.js completo com todas as funções que vamos utilizar em nosso exemplo.
Agora adicione as funções abaixo na Validacoes.js que criamos anteriormente.

function ValidaEmail(obj) {
   email = obj.value;
   delim = ''
   p = ''
   if (obj.value != '') {
   for (i = 0; i <= email.length; i++) {

   if (email.charAt(0) == '.' || email.charAt(0) == '@') {
      alerta("Digite o email corretamente.", obj); return false;
   }
   if (email.charAt(i) == '@') {
      delim = '@'
      if (email.charAt(i) == '@' && email.charAt(i + 1) == '.') {
         alerta("Digite o email corretamente.", obj); return false;
      }
   }

   if (delim == '@') {
      if (email.charAt(i) == '.') {
         p = p + 1
         if (email.charAt(i + 1) == '') {
            alerta("Digite o email corretamente.", obj); return false;
         }
         if (email.charAt(i) == '.' && email.charAt(i + 1) == '.') {
            alerta("Digite o email corretamente.", obj); return false;
         }
      }
   }

   if (email.charAt(i) == ';' || email.charAt(i) == ',' ||
       email.charAt(i) == '*' || email.charAt(i) == ']' ||
       email.charAt(i) == '[' || email.charAt(i) == '(' ||
       email.charAt(i) == ')' || email.charAt(i) == '/' ||
       email.charAt(i) == '|' || email.charAt(i) == '´' ||
       email.charAt(i) == '^' || email.charAt(i) == '+' ||
       email.charAt(i) == '?' || email.charAt(i) == '~' ||
       email.charAt(i) == '-' || email.charAt(i) == '¨' ||
       email.charAt(i) == '*' || email.charAt(i) == '!') {
          alerta("Digite o email corretamente.", obj); return false;
   }
}

   if (delim == '') {
      alerta("Digite o email corretamente.", obj); return false;
   }
   if (p == '') {
      alerta("Digite o email corretamente.", obj); return false;
   }
}
}

function alerta(obj, campo) {
   alert(obj);
   campo.value = '';
   campo.focus;
   return false;
}

Baixe aqui o arquivo Validacoes.js completo com todas as funções de validações que vamos utilizar em nosso exemplo.

Vamos agora criar uma pagina .aspx com o nome de Cadastro.aspx.

Adicione as referências das nossas classes Java script dentro do
do aspx da nossa pagina.



Vamos criar um layout bem simples com os campos Data, Email, Telefone c/ DDD, Telefone s/ DDD, CEP, CPF, CNPJ, RG conforme a imagem abaixo.

Depois de criado o layout vamos agora adicionar codificar as chamadas das funções Java script.

protected void Page_Load(object sender, EventArgs e)
{
//Mascara de Data
txtData.Attributes.Add("onkeydown", "MascaraData(this)");
//Valida Email
txtEmail.Attributes.Add("onblur", "ValidaEmail(this)");
//Mascara Telefone com DDD
txtTelefoneDdd.Attributes.Add("onkeydown", "MascaraTelefoneComDdd(this)");
//Mascara Telefone sem DDD
txtTelefone.Attributes.Add("onkeydown", "MascaraTelefoneSemDdd(this)");
//Mascara CEP
txtCep.Attributes.Add("onkeydown", "MascaraCep(this)");
//Mascara CNPJ
txtCnpj.Attributes.Add("onkeydown", "MascaraCnpj(this)");
//Valida CNPJ
txtCnpj.Attributes.Add("onblur", "ValidaCnpj(this)");
//Mascara CPF
txtCpf.Attributes.Add("onkeydown", "MascaraCpf(this)");
//Valida CPF
txtCpf.Attributes.Add("onblur", "ValidaCpf(this)");
//Mascara RG
txtRg.Attributes.Add("onkeydown", "MascaraRg(this)");
//Valida RG
txtRg.Attributes.Add("onblur", "ValidaRg(this)");
}

Vamos agora testar:

Verifique que esta funcionando corretamente, repare que nos campos Email, CPF, CNPJ e RG fazemos a validação se os números são validos de acordo com a regra de geração dos mesmos.

Por hoje é só pessoal...
Espero ter ajudado os novatos e os experientes casos tenham esquecido, por não utilizarem com muita freqüência. Qualquer dúvida comente o Post que assim que puder retorno com certeza...
Baixe AQUI o Projeto completo...
Fui...

18jun/110

Usando Procedures e Entity Framework

Boa Noite Pessoal...

Hoje vamos criar um tutorial de como utilizar Procedures dentro da Nova tecnologia Microsoft Entity Framework.
Vamos criar um pequeno cadastro com as funções CRUD “Create Read Update Delete”, o foco é mostrar como integrar as duas funcionalidades em uma aplicação Asp.Net com C#, vamos lá.

Neste exemplo criaremos apenas uma tabela “TB_USUARIOS” com os campos Id, Nome, Data Nascimento, Email, Ddd, Telefone, Observação.

Segue abaixo o script de criação da Tabela:

CREATE TABLE dbo.TB_USUARIOS
(
id                int IDENTITY(1,1) NOT NULL,
nome              varchar(100) NULL,
data_nascimento   datetime NULL,
email             varchar(50) NULL,
ddd               int NULL,
telefone          varchar(10) NULL,
observacao        varchar(250) NULL
)

Obs: O campo Id é auto Incremento.

Depois da TB_USUARIO criada vamos criar as nossas procedures de INSERT, UPDATE, DELETE E SELECT. Segue abaixo o script de criação de todas as procedures que utilizaremos neste exemplo.

-- PROCEDURE DE INSERT
CREATE PROCEDURE dbo.INSERI_USUARIOS
(
@NOME                   VARCHAR(100),
@DATA_NASCIMENTO        VARCHAR(10),
@EMAIL                  VARCHAR(50) = NULL,
@DDD                    INT = NULL,
@TELEFONE               VARCHAR(10) = NULL,
@OBSERVACAO             VARCHAR(250) = NULL
)
AS
BEGIN
     INSERT INTO dbo.TB_USUARIOS (nome, data_nascimento,
                       email, ddd, telefone, observacao)
     VALUES
     (UPPER(@NOME), CONVERT(DATETIME,@DATA_NASCIMENTO,103),
                       @EMAIL, @DDD, @TELEFONE, UPPER(@OBSERVACAO))
END

-- PROCEDURE DE UPDATE
CREATE PROCEDURE dbo.ALTERA_USUARIOS
(
@ID                     INT,
@NOME                   VARCHAR(100),
@DATA_NASCIMENTO        VARCHAR(10),
@EMAIL                  VARCHAR(50) = NULL,
@DDD                    INT = NULL,
@TELEFONE               VARCHAR(10) = NULL,
@OBSERVACAO             VARCHAR(250) = NULL
)
AS
BEGIN
     UPDATE TB_USUARIOS
          SET nome = @NOME,
          data_nascimento = CONVERT(datetime,@DATA_NASCIMENTO,103),
          email = @EMAIL,
          ddd = @DDD,
          telefone = @TELEFONE,
          observacao = @OBSERVACAO
     WHERE id = @ID
END

-- PROCEDURE DE DELETE
CREATE PROCEDURE dbo.DELETA_USUARIOS
(
@ID                     INT
)
AS
BEGIN
     DELETE FROM TB_USUARIOS
     WHERE id = @ID
END

-- PROCEDURE DE SELECT
CREATE PROCEDURE dbo.SELECIONA_USUARIO
(
@ID                     INT
)
AS
BEGIN
     SELECT * FROM TB_USUARIOS
     WHERE id = @ID
END

 

Depois que criamos as Procedures, vamos criar um projeto com o nome “Procedure_Entity_Blog” Asp.Net com C#.

A primeira coisa vamos adicionar uma pasta com o nome Dados onde vai ficar a nossa conexão com o Banco de Dados Entity Framework.
Vamos adicionar um novo item como mostra a figura abaixo:

Na próxima tela selecione a opção “Generate from database” e clique em Next.

Selecione a DataBase onde criamos a Tabela e as Procedures:

Em seguida selecione a Tabela e as Procedures que criamos e clique em Finish.

Depois de clicar em finish a perceba que já foi criado uma classe com os campos da nossa tabela Usuarios e do lado direito apareceu todas as Procedures que adicionamos na tela anterior.

Dê um duplo clique em cada uma das Procedures para importarmos as para dentro do nosso Modelo.

Para cada procedure que importamos aparece algumas configurações neste nosso exemplo perceba que apenas a Procedure “SELECIONA_USUARIO” retorna informações do tipo “TB_USUARIOS” as outras apenas executam.

Depois de importarmos todas as procedures, nosso modelo já reconhece as nossas Procedures.
Neste momento finalizamos todas configurações de Banco de dados em nossa aplicação.
Vamos criar uma pagina .aspx em nosso projeto para verificarmos se realmente está funcionando corretamente.

Criei apenas uma tela simples de cadastro de usuários onde vamos fazer todas as chamadas das nossas procedures.

Depois de criarmos o nosso Layout vamos codificar os botões.

Adicione a referência:

using Procedure_Entity_Blog.Dados;

Segue abaixo todos os códigos com os respectivos botões:

// BOTÃO CADASTRAR
protected void btnCadastrar_Click(object sender, EventArgs e)
{
    try
    {
        DB_ESTUDOEntities objDb = new DB_ESTUDOEntities();
        var retorno = objDb.INSERI_USUARIOS(txtNome.Text, txtDataNascimento.Text, txtEmail.Text, Convert.ToInt32(txtDdd.Text), txtTelefone.Text, txtObservacao.Text);
        if (retorno == 1)
            ClientScript.RegisterClientScriptBlock(GetType(), "", "");
        else
            ClientScript.RegisterClientScriptBlock(GetType(), "", "");

        LimpaCampos();
    }
    catch (Exception ex)
    {
        ClientScript.RegisterClientScriptBlock(GetType(), "", "");
    }
}

// BOTÃO ATUALIZAR
protected void btnAtualizar_Click(object sender, EventArgs e)
{
    try
    {
        if (txtId.Text.Equals(""))
        {
            ClientScript.RegisterClientScriptBlock(GetType(), "", "");
            txtId.Focus();
        }
        else
        {
            DB_ESTUDOEntities objDb = new DB_ESTUDOEntities();
            var retorno = objDb.ALTERA_USUARIOS(Convert.ToInt32(txtId.Text), txtNome.Text, txtDataNascimento.Text, txtEmail.Text, Convert.ToInt32(txtDdd.Text), txtTelefone.Text, txtObservacao.Text);
            if (retorno == 1)
                ClientScript.RegisterClientScriptBlock(GetType(), "", "");
            else
                ClientScript.RegisterClientScriptBlock(GetType(), "", "");

            LimpaCampos();
        }
    }
    catch (Exception ex)
    {
        ClientScript.RegisterClientScriptBlock(GetType(), "", "");
    }
}

// BOTÃO DELETAR
protected void btnDeletar_Click(object sender, EventArgs e)
{
    try
    {
        if (txtId.Text.Equals(""))
        {
            ClientScript.RegisterClientScriptBlock(GetType(), "", "");
            txtId.Focus();
        }
        else
        {
            DB_ESTUDOEntities objDb = new DB_ESTUDOEntities();
            var retorno = objDb.DELETA_USUARIOS(Convert.ToInt32(txtId.Text));
            if (retorno == 1)
                ClientScript.RegisterClientScriptBlock(GetType(), "", "");
            else
                ClientScript.RegisterClientScriptBlock(GetType(), "", "");

            LimpaCampos();
        }
    }
    catch (Exception ex)
    {
        ClientScript.RegisterClientScriptBlock(GetType(), "", "");
    }
}

// BOTÃO PESQUISAR
protected void btnPesquisar_Click(object sender, EventArgs e)
{
    try
    {
        if (txtId.Text.Equals(""))
        {
            ClientScript.RegisterClientScriptBlock(GetType(), "", "");
            txtId.Focus();
        }
        else
        {
            DB_ESTUDOEntities objDb = new DB_ESTUDOEntities();
            System.Data.Objects.ObjectResult usuarios = objDb.SELECIONA_USUARIO(Convert.ToInt32(txtId.Text));
            foreach (TB_USUARIOS usu in usuarios.ToList())
            {
                txtNome.Text = usu.nome;
                txtDataNascimento.Text = usu.data_nascimento.Value.ToString("dd/MM/yyyy");
                txtEmail.Text = usu.email;
                txtDdd.Text = usu.ddd.ToString();
                txtTelefone.Text = usu.telefone;
                txtObservacao.Text = usu.observacao;
            }
        }
    }
    catch (Exception ex)
    {
        ClientScript.RegisterClientScriptBlock(GetType(), "", "");
    }
}

//Limpa Campos
void LimpaCampos()
{
    txtId.Text = "";
    txtNome.Text = "";
    txtDataNascimento.Text = "";
    txtEmail.Text = "";
    txtDdd.Text = "";
    txtTelefone.Text = "";
    txtObservacao.Text = "";
}

Perceba que não codifiquei o botão Cancelar pois o mesmo é só chamar o método LimpaCampos.
Olhando o código eu não estou fazendo nenhuma validação de Email, Telefone... pois não é o foco do nosso estudo.
Com este pequeno exemplo percebemos como Entity Framework facilita muito a nossa vida de Desenvolvedor.
Por hoje é só... Espero ter ajudado algumas pessoas que estão no começo ou até mesmo esqueceram de como chamar as Procedures com Entity Framework, qualquer dúvida comente o Post.
Até + Fui...

Baixar o Projeto Original: Procedure_Entity_Blog

4jun/115

Manipulando tabelas com INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN

Boa noite galera...

Hoje venho atender um pedido do Fabio que está com as dúvidas de SQL Server que confunde muita gente que são os comandos de junção de tabelas INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN;

Seguem o script de criação das tabelas:

 

CREATE DATABASE DB_ESTUDO_SQL

USE DB_ESTUDO_SQL

CREATE TABLE [dbo].[TB_USUARIOS](
[idUsuario] [int] IDENTITY(1,1) NOT NULL,
[nome] [varchar](100) NULL,
[idPerfil] [int] NULL
)

INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Eder',1)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Thais',2)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Renan',3)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Eric',4)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Marcelo',5)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Carlos',3)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Marcos',2)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('José ',8)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Maria',8)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Edson',9)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('João',9)
INSERT INTO TB_USUARIOS (nome,idPerfil) VALUES ('Rafael',10)

CREATE TABLE [dbo].[TB_PERFIS](
[idPerfil] [int] IDENTITY(1,1) NOT NULL,
[nome] [varchar](50) NULL
)

INSERT INTO TB_PERFIS (nome) VALUES ('Administrador')
INSERT INTO TB_PERFIS (nome) VALUES ('Usuario')
INSERT INTO TB_PERFIS (nome) VALUES ('Usuario Avançado')
INSERT INTO TB_PERFIS (nome) VALUES ('Convidado')
INSERT INTO TB_PERFIS (nome) VALUES ('Visitante')
INSERT INTO TB_PERFIS (nome) VALUES ('Teste')
INSERT INTO TB_PERFIS (nome) VALUES ('Temporário')

 

Irei começar pelo INNER JOIN ou apenas JOIN que retorna os registros que estão na tabela usuários e que contém o na tabela perfil cruzando pelo IdPerfil.

SELECT u.nome as NOME_USUARIO,p.nome AS NOME_PERFIL
FROM TB_USUARIOS u
INNER JOIN TB_PERFIS p
ON u.idPerfil = p.idPerfil

Resultado:

Inner Join

Agora o LEFT JOIN ou LEFT OUTER JOIN vai retornar todos os casos da tabela usuários mesmo que não estejam na tabela perfil, os casos que ele não encontrar vão retornar null.

SELECT u.nome as NOME_USUARIO,p.nome AS NOME_PERFIL
FROM TB_USUARIOS u
LEFT JOIN TB_PERFIS p
ON u.idPerfil = p.idPerfil

Resultado:

Left Join

O RIGHT JOIN ou RIGHT OUTER JOIN vai retornar o oposto do left join, pois vão retornar todos os casos da tabela perfil mesmo que não encontrem na tabela usuários, os casos que não encontrar vão retornar null.

SELECT u.nome as NOME_USUARIO,p.nome AS NOME_PERFIL
FROM TB_USUARIOS u
RIGHT JOIN TB_PERFIS p
ON u.idPerfil = p.idPerfil

Resultado:

Right Join

O FULL JOIN ou FULL OUTER JOIN vão retornar todos os casos da tabela usuários e todos os casos da tabela perfil  que se cruzam e os que não se cruzam, os casos que ele não encontrar vão retornar null.

SELECT u.nome as NOME_USUARIO,p.nome AS NOME_PERFIL
FROM TB_USUARIOS u
FULL OUTER JOIN TB_PERFIS p
ON u.idPerfil = p.idPerfil

Resultado:

E por ultimo o CROSS JOIN que vai retornar um produto cartesiano que pra cada caso da tabela usuário vai retornar todos da tabela perfil.

SELECT u.nome as NOME_USUARIO,p.nome AS NOME_PERFIL
FROM TB_USUARIOS u
CROSS JOIN TB_PERFIS p

Resultado:

Cross Join

Com este pequeno tutorial espero ter ajudado o Fabio e outros que tenham a mesma dúvida.
Galera por hoje é só.
Bom estudo pra vocês até a próxima.

30mai/111

Manipulando arquivos no SQL Server

Boa noite galera...

Hoje vou mostrar-lhes como acessar um arquivo com as extensões (.txt, .csv, .xls, .mdb) a partir de um SELECT no SQL Server, Vamos lá...

1º  Arquivo .txt;

SELECT * FROM OPENROWSET('MSDASQL.1',
'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=C:\;',
'SELECT * FROM teste1.txt')

Em alguns casos o arquivo .txt quando selecionamos funciona, porém o arquivo tem um Encoding UTF-8 ou ANSI entre outros e pode acontecer que os campos onde tem acentos fique com problemas. Existe um arquivo que chamamos de Schema.ini que fica no mesmo caminho do arquivo .txt, onde podemos passar alguns parametros como delimitador se a primeira linha é o Cabeçalho e até o Encoding que facilita muito a nossa vida segue abaixo como criar o arquivo.

- Crei um arquivo com o nome de schema.ini;

[teste1.txt]
Format=Delimited(;)
CharacterSet=ANSI
ColNameHeader=True

Copie e cole os comandos acima.

Altere o arquivo adicionando o nome do arquivo que você deseje selecionar, o delimitador, o CharacterSet (“Encoding”) e coloque se a primeira linha é o Cabeçalho.

Teste e verifique que funciona normalmente agora.

2º  Arquivo .csv;

SELECT * FROM OPENROWSET('MSDASQL.1',
'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=C:\;',
'SELECT * FROM teste2.csv')

--ou

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Text;Database=C:\;HDR=YES',
'SELECT * FROM teste2.csv')

Perceba que estou selecionando todos os campos, você pode adicionar apenas os campos que você estiver precisando.
Mude o DefaultDir e coloque o diretório onde esta o arquivo que você deseje selecionar.

3º Arquivo .xls:

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\teste3.xls;Extended Properties=Excel 8.0')...[Plan1$]

--ou

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\teste3.xls', [Plan1$])

--ou

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\teste3.xls', 'SELECT * FROM [Plan1$]')

Quando selecionamos arquivos do Excel perceba que precisamos colocar qual aba da planilha vamos manipular.

4º  Arquivo .mdb:

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\teste4.mdb';'Admin';'', tabela1)

--ou

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\teste4.mdb";User ID=Admin;Password=')...tabela1

Perceba que criei um arquivo com o nome de teste.mdb e estou apenas selecionando os dados da tabela1.

Por hoje é só galera....
Qualquer dúvida faça a sua pergunta no comentário que assim que possível eu respondo...

22mai/110

Soluções do Auto-increment do SQL Server

Boa Noite Pessoal!

Hoje vou mostrar uma dica de SQL Server.

Quem nunca criou uma tabela no SQL Server e nesta tabela adicionou um campo auto-incremental. E um dia precisou apagar o ultimo caso desta tabela, como sabemos que o SQL Server não verifica o ultimo registro pra fazer ele + 1, por exemplo:

Crie uma tabela simples com os campos:

  • Id tipo int; -> (auto-increment)
  • Nome tipo varchar;
  • Email tipo varchar;
  • Sexo tipo char;

Depois de criado os campos de o nome da tabela de tb_usuarios
CREATE TABLE [dbo].[tb_usuarios](
[id] [int] IDENTITY(1,1) NOT NULL,
[nome] [varchar](50) NOT NULL,
[email] [varchar](100) NOT NULL,
[sexo] [char](1) NOT NULL
) ON [PRIMARY]
GO
Carregue esta tabela com alguns usuários.

INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('João dos Santos' , 'joao@teste.com', 'M')
INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('Maria dos Santos' , 'maria@teste.com', 'F')
INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('Pedro dos Santos' , 'pedro@teste.com', 'M')
INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('Joana dos Santos' , 'joana@teste.com', 'F')
INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('Rafael dos Santos' , 'rafael@teste.com', 'M')

Agora pegue o ultimo Id e apague o mesmo.

DELETE FROM dbo.tb_usuarios WHERE id = 5

Feito isso insira um novo usuário, perceba que ele não pegou o ultimo Id que você apagou e sim o Id que você 6 e não o 5.

INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('Marcos dos Santos' , 'marcos@teste.com', 'M')

Com o comando abaixo você consegue pegar o ultimo Id utilizado na tabela

DBCC CHECKIDENT (
       tb_usuarios --nome da tabela
       ,NORESEED --comando para retornar o ultimo id da tabela
       )

Apague agora o ultimo Id 6 para que este registro se torne o Id 5.

DELETE FROM dbo.tb_usuarios WHERE id = 6

Com o comando abaixo indica que o ultimo Id da tabela é 4, com isso o SQL Server automaticamente vai pegar o Id 5 e adicionar para o próximo registro.

DBCC CHECKIDENT (
       tb_usuarios --nome da tabela
       ,RESEED --comando para recetar
       ,4 --Ultimo Id da tabela com informação
)

Insira novamente o caso abaixo e verifique que o mesmo já esta com o Id 5 que é o correto..

INSERT INTO dbo.tb_usuarios (nome, email, sexo)
VALUES ('Marcos dos Santos' , 'marcos@teste.com', 'M')

Este Post é simples mais já resolveu alguns problemas onde trabalho...

Até a próxima....

1mai/110

CheckBox dentro do GridView

Olá pessoal...

No primeiro Artigo do blog vou mostrar como manipular um ou mais CheckBox dentro de um Gridview sem adicionar um botão para a verificação do CheckBock selecionados..

Exemplo do projeto funcionando

Criei um Projeto com um nome qualquer.

Na pagina default.aspx adicionei um GridView com uma auto formatação padrão do próprio VS2010 com um SQLDataSource apontando para a base “AdventureWorks” do SQL Server 2008 e a Tabela Product.

A query ficou

SELECT TOP 10 ProductID, Name FROM Production.Product

Agora vamos adicionar dois “TemplateField” onde vamos adicionar o CheckBox.

Vamos agora em “Edit Templates”.

No “ItemTemplate” adicionei um CheckBox e mudei as propriedades ID para chk1 e AutoPostBack pra true, na outra coluna “TemplateField” adicionei outro CheckBox e mudei o ID para chk2 e o AutoPostBack também pra true.

O GridView ficou da seguinte forma:

Agora vamos codificar a seguinte caso:

  • Caso selecionarmos o chk1 automaticamente iremos selecionar o chk2 da coluna ao lado e vice e versa.
  • Caso removermos a seleção o chk1 automaticamente iremos selecionar o chk2 da coluna ao lado e vice e versa.

Para isso vamos acessar o chk1 dentro do “Edit Templates” vamos adicionar o evento CheckedChanged e vamos codificar o evento.

protected void chk1_CheckedChanged(object sender, EventArgs e)
{
      //Vamos pegar o checkbok clicado
      CheckBox chk0 = ((CheckBox)sender);

      //Instancia da linha do GridView
      GridViewRow row = ((GridViewRow)chk0.NamingContainer);
      if (row != null)
      {
          //Estamos dentro da linha na qual está o chekbox que selecionamos.
          //Instanciamos dois CheckBox dentro do Gridview
          CheckBox chk1 = (CheckBox)row.Cells[2].FindControl("chk1");
          CheckBox chk2 = (CheckBox)row.Cells[3].FindControl("chk2");

           //Verificamos qual dos CheckBox foi iniciado o Evento
          if (chk0.ID == chk1.ID)
          {
               //Caso o chk1 estiver selecionado vamos selecionar o chk2
               //caso contrário retiramos a seleção do chk2.
               if (chk1.Checked)
                  chk2.Checked = true;
               else
                  chk2.Checked = false;
          }
          else
          {
               //Caso o chk2 estiver selecionado vamos selecionar o chk1
               //caso contrário retiramos a seleção do chk1.
               if (chk2.Checked)
                  chk1.Checked = true;
               else
                  chk1.Checked = false;
          }
      }
}

Este mesmo evento deverá ser adicionado no chk2.
Só rodar e pronto.
Com este exemplo podemos manipular qualquer controle da linha onde esta o CheckBox...
Bons estudos...
Até a próxima..

1mai/113

Olá, mundo!

Meu nome é Eder como ninguém aqui me conhece, no Primeiro
Post vou falar um pouco sobre mim…

Já trabalhei como Analista de Suporte por 3 anos e resolvi mudar de área..
Atualmente como Analista Programador Pleno, na plataforma DotNet, Linguagem C#,
Java Script,
tento PHP,
Bancos de Dados SQL Server, Oracle ….
Estou trabalhando atualmente alocado dentro da Telefônica
criando sistemas internos, indicadores ou mais conhecido como (BI)….
Busco sempre novos desafios tanto Profissional quanto Pessoal
Sempre tive a vontade de criar um blog este é primeiro.

Estou solteiro até dia 17/12/2011  aleluia….

E lá vamos Nós

Categorias: Outros 3 Comentários