none
fazer 2 select e mostrar em uma gridview RRS feed

  • Pergunta

  • Bom dia pessoal estou com uma duvida na parte de select: eu tenho a tabela do cliente e também os dados do endereço deste cliente em outra tabela e gostaria de mostrar essas duas consultas em uma só gridview como posso fazer isso? Desde já agradeço
    segunda-feira, 20 de outubro de 2014 11:59

Respostas

  • Bom dia Fernando,

    Você pode fazer apenas um SELECT utilizando INNER JOIN.

    SELECT A.CodigoCliente,
           A.NomeCliente,
           B.Logradouro,
           B.Municipio,
           B.UF
    FROM tbCliente A WITH(NOLOCK)
     INNER JOIN tbEnderecoCliente B WITH(NOLOCK)
           ON B.CodigoCliente = A.CodigoCliente
    WHERE A.CodigoCliente = 128

    Dessa forma você retornará os dados do cliente e o seu respectivo endereço em apenas uma consulta.

    OBS: ajuste o comando acima para a sua tabela e os seus campos, aproveitando apenas a estrutura.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    segunda-feira, 20 de outubro de 2014 12:04

Todas as Respostas

  • Bom dia Fernando,

    Você pode fazer apenas um SELECT utilizando INNER JOIN.

    SELECT A.CodigoCliente,
           A.NomeCliente,
           B.Logradouro,
           B.Municipio,
           B.UF
    FROM tbCliente A WITH(NOLOCK)
     INNER JOIN tbEnderecoCliente B WITH(NOLOCK)
           ON B.CodigoCliente = A.CodigoCliente
    WHERE A.CodigoCliente = 128

    Dessa forma você retornará os dados do cliente e o seu respectivo endereço em apenas uma consulta.

    OBS: ajuste o comando acima para a sua tabela e os seus campos, aproveitando apenas a estrutura.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    segunda-feira, 20 de outubro de 2014 12:04
  • bom dia Bruno, desta forma não deu certo vou tentar detalhar melhor, eu tenho o form de cadastro de cliente quando eu clico no botão pesquisar abre outro form, dentro deste form há um textBox uma checkBox para filtro por nome, e uma gridView, quando eu selecionar o nome do cliente e clicar no botão pesquisar gostaria que a gridView mostrasse os dados deste cliente que está em uma tabela mais os dados do seu endereço que está em uma outra tabela, e fazer isto através de só uma consulta.. Desde já agradeço!

     
    quarta-feira, 22 de outubro de 2014 14:24
  • Bom dia Fernando,

    O propósito do INNER JOIN é fazer essa união das tabelas em apenas uma consulta mesmo, pode reparar que no SELECT eu trago dados da tabela A e da tabela B.

    Você fez o INNER JOIN ligando as chaves das duas tabelas? O cliente que você pesquisa possui dados na tabela de endereço?

    Para eu poder ver o que aconteceu, seria melhor você postar o seu código para eu ver a estrutura do seu comando e a estrutura das suas tabelas.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quarta-feira, 22 de outubro de 2014 14:58
  • ok, vou fazer mais umas tentativas se não conseguir te mando o código... obrigado! 
    quarta-feira, 22 de outubro de 2014 16:58
  • class DAL_CLIENTE
        {
            private const string _strCon = @"Data Source=.\SQLEXPRESS;Initial Catalog=ZFHOFFICE1;Integrated Security=True";

            #region"FILTROS NOME, COD, CPF"
            //PESQUISA  POR CODIGO
            public MOD_CLIENTE SelectCOD(int wCod)
            {
                MOD_CLIENTE oClie = new MOD_CLIENTE();
                MOD_END oTel = new MOD_TEL();

                SqlConnection con = new SqlConnection(_strCon);
                string sql = "select * from TB_CLIENTE A WITH(NOLOCK) INNER JOIN"+

    "TB_ENDERECO B WITH(NOLOCK) ON B.ID_CLIENTE=A.ID_CLIENTE; ";
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.Parameters.AddWithValue("@ID_CLIENTE", wCod);

                con.Open();
                try
                {
                    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    if (reader.Read())
                    {
                        oClie.ID_CLIENTE = Convert.ToInt32(reader["ID_CLIENTE"]);
                        oClie.NOME = reader["NOME"].ToString();
                        oClie.SEXO = Convert.ToBoolean(reader["SEXO"]);
                        oClie.CPF_CNPJ = reader["CPF_CNPJ"].ToString();                
    ...

                        oEnd.ID_END = Convert.ToInt32(reader["ID_END"]);
                        oEnd.ID_CLIENTE = Convert.ToInt32(reader["ID_CLIENTE"]);
                        oEnd.TIPO_ENDERECO = reader["TIPO_ENDERECO"].ToString();
                        oEnd.ENDERECO = reader["ENDERECO"].ToString();
                        oEnd.BAIRRO = reader["BAIRRO"].ToString(); 
                    }
                }
                catch (Exception ex)
                {
                    frmMsgBxErro.ShowBox("Erro Pesquisa cliente por código:  " + ex.Message);
                }
                finally
                {
                    con.Close();
                }
                return oClie;
            }

             bom Bruno não deu muito certo o jeito que tentei fazer coloquei este codigo para fazer a busca, a tabela de cliente tem mais atributos mas nao coloquei para nao extenso... obrigado          

    quarta-feira, 22 de outubro de 2014 20:44
  • Fernando, a estrutura do seu SELECT está certo.

    Acontece algum erro na execução do código ou o resultado não é o esperado?

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quinta-feira, 23 de outubro de 2014 09:59