none
Retonar quantidade de Registros de uma consulta RRS feed

  • Pergunta

  • Pessoal;

       fiz um metoddo para retornar a quantidade total de registros de uma consulta, o problema e que ela retorna sempre a quantidade 430 e nao 2 por exemplo de uma consulta, segue o metodo abaixo para ver se alguem pode me ajudar.

    public int contadorRegistros(TimeSheet RegistrosTimeSheetWeb)
            {
                int retorno = 0;
    
                if (RegistrosTimeSheetWeb != null)
                {
                    conexao = RegistrosTimeSheetWeb._Conn;
    
                    string comandoSQL = "SELECT ";
                    comandoSQL += "TimeSheet.*, ";
                    comandoSQL += " Processo.NomeProcesso, ";
                    comandoSQL += " SUBSTRING(TimeSheet.DescricaoDetalhada,1,50) as ResumoDescricaoDetalhada, ";
                    comandoSQL += " ISNULL(PessoaProfissional.NomeFantasia,PessoaProfissional.RazaoSocial) as NomeProfissional, ";
                    comandoSQL += " ISNULL(PessoaCliente.NomeFantasia,PessoaCliente.RazaoSocial) as NomeCliente, ";
                    comandoSQL += " TipoAtividade.Descricao as DescricaoTipoAtividade ";
                    comandoSQL += " FROM TimeSheet";
                    comandoSQL += " INNER JOIN Pessoa PessoaProfissional ";
                    comandoSQL += " ON TimeSheet.CodigoPessoaProfissional = PessoaProfissional.CodigoPessoa ";
                    comandoSQL += " INNER JOIN TipoAtividade ";
                    comandoSQL += " ON TimeSheet.CodigoTipoAtividade = TipoAtividade.CodigoTipoAtividade ";
                    comandoSQL += " LEFT OUTER JOIN Pessoa PessoaCliente ";
                    comandoSQL += " ON TimeSheet.CodigoPessoaCliente = PessoaCliente.CodigoPessoa ";
                    comandoSQL += " LEFT OUTER JOIN Processo ";
                    comandoSQL += " ON TimeSheet.CodigoProcesso = Processo.CodigoProcesso ";
    
                    comandoSQL += " WHERE TimeSheet.CodigoPessoa IN (Select CodigoPessoa From EmpresaGrupoUsuario ";
                    comandoSQL += " Inner Join UsuarioDoGrupo on UsuarioDoGrupo.CodigoGrupoUsuario=EmpresaGrupoUsuario.CodigoGrupoUsuario ";
                    comandoSQL += " Where UsuarioDoGrupo.LoginUsuario= '" + RegistrosTimeSheetWeb._AlteracaoUsuario +"') ";
    
    
                    if (RegistrosTimeSheetWeb._NSUTimeSheet.Length > 0)
                    {
                        string[] timesheet = new string[2];
                        comandoSQL += "AND NSUTimeSheet in (";
                        for (int indice = 0; indice < RegistrosTimeSheetWeb._NSUTimeSheet.Length; indice++)
                        {
                            timesheet = RegistrosTimeSheetWeb._NSUTimeSheet;
                            if (indice != RegistrosTimeSheetWeb._NSUTimeSheet.Length - 1)
                                comandoSQL += timesheet[indice] + ",";
                            else
                                comandoSQL += timesheet[indice] + ")";
                        }
                    }
    
                    if ((RegistrosTimeSheetWeb._CodigoPessoa != null) && (RegistrosTimeSheetWeb._CodigoPessoa != ""))
                    {
                        comandoSQL += " AND TimeSheet.CodigoPessoa = " + RegistrosTimeSheetWeb._CodigoPessoa;
                    }
    
                    this.comando = new SqlCommand(comandoSQL, this.conexao);
                    this.comando.CommandTimeout = 420;
    
                    try
    				{
    					conexao.Open();
    
    					retorno = Convert.ToInt32(comando.ExecuteScalar());
    				}
    				finally
    				{
    					conexao.Close();
    				}
    
                    return retorno;
                }
    
                return retorno;
    
            }
    terça-feira, 6 de outubro de 2009 16:54

Respostas

  • resolvido meu problema

    o comando executescalar retorna apenas um campo, entao eu coloquei a consulta assim:

    string comandoSQL = "SELECT ";

                    comandoSQL += "COUNT(*)";

                    comandoSQL += " FROM TimeSheet";

                    comandoSQL += " INNER JOIN Pessoa PessoaProfissional ";

                    comandoSQL += " ON TimeSheet.CodigoPessoaProfissional = PessoaProfissional.CodigoPessoa ";

                    comandoSQL += " INNER JOIN TipoAtividade ";

                    comandoSQL += " ON TimeSheet.CodigoTipoAtividade = TipoAtividade.CodigoTipoAtividade ";

                    comandoSQL += " LEFT OUTER JOIN Pessoa PessoaCliente ";

                    comandoSQL += " ON TimeSheet.CodigoPessoaCliente = PessoaCliente.CodigoPessoa ";

                    comandoSQL += " LEFT OUTER JOIN Processo ";

                    comandoSQL += " ON TimeSheet.CodigoProcesso = Processo.CodigoProcesso ";



                    comandoSQL += " WHERE TimeSheet.CodigoPessoa IN (Select CodigoPessoa From EmpresaGrupoUsuario ";

                    comandoSQL += " Inner Join UsuarioDoGrupo on UsuarioDoGrupo.CodigoGrupoUsuario=EmpresaGrupoUsuario.CodigoGrupoUsuario ";

                    comandoSQL += " Where UsuarioDoGrupo.LoginUsuario= '" + RegistrosTimeSheetWeb._AlteracaoUsuario +"') ";
    • Marcado como Resposta Wagner Sena PE terça-feira, 6 de outubro de 2009 18:26
    terça-feira, 6 de outubro de 2009 18:26

Todas as Respostas

  • Pessoal;

       fiz um metoddo para retornar a quantidade total de registros de uma consulta, o problema e que ela retorna sempre a quantidade 430 e nao 2 por exemplo de uma consulta, segue o metodo abaixo para ver se alguem pode me ajudar.

    public int contadorRegistros(TimeSheet RegistrosTimeSheetWeb)
    
            {
    
                int retorno = 0;
    
    
    
                if (RegistrosTimeSheetWeb != null)
    
                {
    
                    conexao = RegistrosTimeSheetWeb._Conn;
    
    
    
                    string comandoSQL = "SELECT ";
    
                    comandoSQL += "TimeSheet.*, ";
    
                    comandoSQL += " Processo.NomeProcesso, ";
    
                    comandoSQL += " SUBSTRING(TimeSheet.DescricaoDetalhada,1,50) as ResumoDescricaoDetalhada, ";
    
                    comandoSQL += " ISNULL(PessoaProfissional.NomeFantasia,PessoaProfissional.RazaoSocial) as NomeProfissional, ";
    
                    comandoSQL += " ISNULL(PessoaCliente.NomeFantasia,PessoaCliente.RazaoSocial) as NomeCliente, ";
    
                    comandoSQL += " TipoAtividade.Descricao as DescricaoTipoAtividade ";
    
                    comandoSQL += " FROM TimeSheet";
    
                    comandoSQL += " INNER JOIN Pessoa PessoaProfissional ";
    
                    comandoSQL += " ON TimeSheet.CodigoPessoaProfissional = PessoaProfissional.CodigoPessoa ";
    
                    comandoSQL += " INNER JOIN TipoAtividade ";
    
                    comandoSQL += " ON TimeSheet.CodigoTipoAtividade = TipoAtividade.CodigoTipoAtividade ";
    
                    comandoSQL += " LEFT OUTER JOIN Pessoa PessoaCliente ";
    
                    comandoSQL += " ON TimeSheet.CodigoPessoaCliente = PessoaCliente.CodigoPessoa ";
    
                    comandoSQL += " LEFT OUTER JOIN Processo ";
    
                    comandoSQL += " ON TimeSheet.CodigoProcesso = Processo.CodigoProcesso ";
    
    
    
                    comandoSQL += " WHERE TimeSheet.CodigoPessoa IN (Select CodigoPessoa From EmpresaGrupoUsuario ";
    
                    comandoSQL += " Inner Join UsuarioDoGrupo on UsuarioDoGrupo.CodigoGrupoUsuario=EmpresaGrupoUsuario.CodigoGrupoUsuario ";
    
                    comandoSQL += " Where UsuarioDoGrupo.LoginUsuario= '" + RegistrosTimeSheetWeb._AlteracaoUsuario +"') ";
    
    
    
    
    
                    if (RegistrosTimeSheetWeb._NSUTimeSheet.Length > 0)
    
                    {
    
                        string[] timesheet = new string[2];
    
                        comandoSQL += "AND NSUTimeSheet in (";
    
                        for (int indice = 0; indice < RegistrosTimeSheetWeb._NSUTimeSheet.Length; indice++)
    
                        {
    
                            timesheet = RegistrosTimeSheetWeb._NSUTimeSheet;
    
                            if (indice != RegistrosTimeSheetWeb._NSUTimeSheet.Length - 1)
    
                                comandoSQL += timesheet[indice] + ",";
    
                            else
    
                                comandoSQL += timesheet[indice] + ")";
    
                        }
    
                    }
    
    
    
                    if ((RegistrosTimeSheetWeb._CodigoPessoa != null) && (RegistrosTimeSheetWeb._CodigoPessoa != ""))
    
                    {
    
                        comandoSQL += " AND TimeSheet.CodigoPessoa = " + RegistrosTimeSheetWeb._CodigoPessoa;
    
                    }
    
    
    
                    this.comando = new SqlCommand(comandoSQL, this.conexao);
    
                    this.comando.CommandTimeout = 420;
    
    
    
                    try
    
    				{
    
    					conexao.Open();
    
    
    
    					retorno = Convert.ToInt32(comando.ExecuteScalar());
    
    				}
    
    				finally
    
    				{
    
    					conexao.Close();
    
    				}
    
    
    
                    return retorno;
    
                }
    
    
    
                return retorno;
    
    
    
            }
    
    

    o comando que retorna a quantidade é: retorno = Convert.ToInt32(comando.ExecuteScalar());
    terça-feira, 6 de outubro de 2009 16:54
  • Olá,

    Você está utilizando .net 3.5?

    Se sim:

    var x = Consulta();
    int registros = x.Count();

    Roberto Santos http://blog.robertoosantos.com
    terça-feira, 6 de outubro de 2009 17:37
  • estou sim;

       porem sou iniciante em VS, estou utilizando o 2008, esse metodo consulta eu iria criar?

    pode mostrar isso no codigo postado acima???

    atenciosamente

    wagner sena
    terça-feira, 6 de outubro de 2009 17:39
  • Consulta()

    Seria o método que você usaria para consultar o banco de dados e retornar uma coleção de dados (List, ArrayList, Array...).

    Se possível, utilize LINQ em suas consultas. http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx
    Roberto Santos http://blog.robertoosantos.com
    terça-feira, 6 de outubro de 2009 17:45
  • nao tem como eu adpatar essa parte do meu codigo?

    retorno = Convert.ToInt32(comando.ExecuteScalar());
    terça-feira, 6 de outubro de 2009 18:14
  • resolvido meu problema

    o comando executescalar retorna apenas um campo, entao eu coloquei a consulta assim:

    string comandoSQL = "SELECT ";

                    comandoSQL += "COUNT(*)";

                    comandoSQL += " FROM TimeSheet";

                    comandoSQL += " INNER JOIN Pessoa PessoaProfissional ";

                    comandoSQL += " ON TimeSheet.CodigoPessoaProfissional = PessoaProfissional.CodigoPessoa ";

                    comandoSQL += " INNER JOIN TipoAtividade ";

                    comandoSQL += " ON TimeSheet.CodigoTipoAtividade = TipoAtividade.CodigoTipoAtividade ";

                    comandoSQL += " LEFT OUTER JOIN Pessoa PessoaCliente ";

                    comandoSQL += " ON TimeSheet.CodigoPessoaCliente = PessoaCliente.CodigoPessoa ";

                    comandoSQL += " LEFT OUTER JOIN Processo ";

                    comandoSQL += " ON TimeSheet.CodigoProcesso = Processo.CodigoProcesso ";



                    comandoSQL += " WHERE TimeSheet.CodigoPessoa IN (Select CodigoPessoa From EmpresaGrupoUsuario ";

                    comandoSQL += " Inner Join UsuarioDoGrupo on UsuarioDoGrupo.CodigoGrupoUsuario=EmpresaGrupoUsuario.CodigoGrupoUsuario ";

                    comandoSQL += " Where UsuarioDoGrupo.LoginUsuario= '" + RegistrosTimeSheetWeb._AlteracaoUsuario +"') ";
    • Marcado como Resposta Wagner Sena PE terça-feira, 6 de outubro de 2009 18:26
    terça-feira, 6 de outubro de 2009 18:26