none
Dificuldade com DataReader RRS feed

  • Pergunta

  • Bom gente, estou quebrando a cabeça faz um tempão e não consigo solucionar.
    Preciso de ajuda:

      É o seguinte, tenho uma tabela Categorias com 16 registros. Estou tentando ler os registros e mostrar em um DataGridView. Porém, só aparece os 6 primeiros registros no DataGridView. O restante não aparece, sempre que faço um insert, update ou delete na tabela.

    Ou seja, quando o formulário é carregado, uso a rotina abaixo e aparecem os 16 registros no DataGridView, depois que    altero alguma coisa na tabela só aparecem 6 categorias no datagridview. Já verifiquei e a conexão está fechada ao entrar nessa rotina, não tenho nenhum objeto datareader aberto paralelamente a este, etc...

    Alguém pode me ajudar?

    Uso o Sql Server 2005 express, não sei se ele tem alguma limitação.

    Código:

    try
      {
      using(SqlConnection conn = new SqlConnection(strConn)){
       
       dataGridCat.Rows.Clear();
         
       string strCmd = "Select * from Categorias";
    
       conn.Open();
    
       SqlCommand cmd = new SqlCommand(strCmd, conn);
    
       
       SqlDataReader dr 
       = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    
       while (dr.Read())
       {
       for (int i = 0; i < dr.VisibleFieldCount - 1; i++)
       {
        dataGridCat.Rows.Add(dr.GetValue(i), dr.GetValue(i + 1));
       }
       }
       dr.Close()<br/>  }
      }
      catch (SqlException e)
      {
    
      }
    
    segunda-feira, 14 de fevereiro de 2011 06:01

Respostas

  • Cara, esquece datareader e usa dataset ou datatable.

    voce quando usa datareader deixa a base de dados em perigo, este datareader busca um registo de cada vez. E bo usar datareader quando se faz pesquizas apenas.

    Esquece isto e usa dataset ou datatable.

    try
     {
     using(SqlConnection conn = new SqlConnection(strConn)){
      
      dataGridCat.Rows.Clear();
       
      string strCmd = "Select * from Categorias";
    
      conn.Open();
    
      SqlCommand cmd = new SqlCommand(strCmd, conn);
    
      SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataSet dt = new DataSet();
    
          adapter.Fill(dt);
    
        dataGridCat.Datasource = dt.table[0];
      }
      }
      dr.Close()<br/> }
     }
     catch (SqlException e)
     {
    
     }
    


    Just Be Humble Malange!
    terça-feira, 15 de fevereiro de 2011 14:33

Todas as Respostas

  • Quando você faz o insert, update ou delete, você chama o método para popular o grid novamente  e só aparecem 6 registros? Debugando você consegue verificar se ele faz o select novamente e cria o datareader desde o inicio?

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 14 de fevereiro de 2011 12:32
  • Rodrigo,

    Você poderia detalhar como está fazendo a inserção, deleção, etc?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    segunda-feira, 14 de fevereiro de 2011 12:44
    Moderador
  • Cara, esquece datareader e usa dataset ou datatable.

    voce quando usa datareader deixa a base de dados em perigo, este datareader busca um registo de cada vez. E bo usar datareader quando se faz pesquizas apenas.

    Esquece isto e usa dataset ou datatable.

    try
     {
     using(SqlConnection conn = new SqlConnection(strConn)){
      
      dataGridCat.Rows.Clear();
       
      string strCmd = "Select * from Categorias";
    
      conn.Open();
    
      SqlCommand cmd = new SqlCommand(strCmd, conn);
    
      SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataSet dt = new DataSet();
    
          adapter.Fill(dt);
    
        dataGridCat.Datasource = dt.table[0];
      }
      }
      dr.Close()<br/> }
     }
     catch (SqlException e)
     {
    
     }
    


    Just Be Humble Malange!
    terça-feira, 15 de fevereiro de 2011 14:33