none
ExecuteReader x ExecuteNonQuery RRS feed

  • Pergunta

  • Pessoal,

    Executo um executereader para me trazer o resultado de um SQL mas eu tb precisava retornar o numero de linhas retornadas.
    Eu consigo isso com o executenonquery mas como usar os 2 num metodo ?

    Como posso fazer isso ?
    Segue o metodo abaixo:

    public static List<DepoimentosProdutos> SelectByProductId(int pIdProduto)
            {
                //Initialize command
                SqlConnection con = new SqlConnection(_connectionString);
                SqlCommand cmd = new SqlCommand();
                cmd = new SqlCommand("DepoimentosSelectByIdProduto", con);

                cmd.CommandType = CommandType.StoredProcedure;

                // Add parameters
                cmd.Parameters.AddWithValue("@id_produto", pIdProduto);

                List<DepoimentosProdutos> results = new List<DepoimentosProdutos>();
                using (con)
                {
                    con.Open();
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                        results.Add(new DepoimentosProdutos(reader));
                }
                return results;
            }

     

    segunda-feira, 11 de julho de 2011 18:41

Respostas

Todas as Respostas

  • Use isto que vai dar certo...

     

    public static int NumLinhas()

    {

    int numLinhas = 0;

    //Initialize command
                SqlConnection con = new SqlConnection(_connectionString);
                SqlCommand cmd = new SqlCommand();

    using (con)
                {
                    con.Open();

    cmd.CommandType = CommandType.Text;

     numLinhas = Convert.ToInt32(cmd.ExecuteScalar("SELECT COUNT(*) FROM MINHA_TABELA"));

    }

    return numLinhas;

    }

    Abs


    Rodolfo Paoni
    • Sugerido como Resposta Rodolfo Paoni segunda-feira, 11 de julho de 2011 18:49
    segunda-feira, 11 de julho de 2011 18:47
  • Gabriel,

    Na verdade você não conseguira fazer isto...

    Você deverá executar o comando 2 vezes, a primeira vez somente para saber o numero de registros retornados, e uma segunda vez para fazer a leitura dos dados coisa que não é muito recomendável porque estaria gerando uma carga "dobrada" no seu código.

    Mas de acordo com o código que você postou, você pode pegar o Count da sua lista "results" depois que você fizer a leitura.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    segunda-feira, 11 de julho de 2011 18:47
    Moderador
  • Mas como ja estou retorno o reader results, como retornaria a qtde de linhas dela ?

    criaria uma session e armazenaria o int qtde = results.count() nela ?

    segunda-feira, 11 de julho de 2011 18:54
  • Não...

    Como a sua função já retorna a lista results, você poderá acessar a propriedade Count para saber quantos registros foram lidos, no seu caso seria tipo:

    List<DepoimentosProdutos> lista = SelectByProductId(1);
    MessageBox.Show(lista.Count.ToString());
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    • Marcado como Resposta AGA Neto segunda-feira, 11 de julho de 2011 19:06
    segunda-feira, 11 de julho de 2011 18:58
    Moderador
  • valeu
    segunda-feira, 11 de julho de 2011 19:06