none
Problema com gravação de dados em .TXT RRS feed

  • Pergunta

  • Galera, tubo beleza!

    É o seguinte meu BD tem no total 12.000 registros até ai beleza,

    mas quando eu rodo minha aplicação e ponho para gravar em um arquivo.txt,

    no final quando eu vou ver os registros ele só gravou 7.000!

    Alguém já passou por isso!? 

    Abraços!

    Obs. Registros Arredondados para poder explicar melhor

    Obs. Aplicação em C# 2010.

     

    quinta-feira, 2 de fevereiro de 2012 14:28

Respostas

  • Este comando pega um registo de cada vez:  SqlDataReader dr = cmd.ExecuteReader();

    usa Dataset ou table, enche o dataset ou table depois faz loop. e veja o k acontece.


    One word frees us of all the weight and pain of life: that word is love.
    • Marcado como Resposta Fabio Felix quinta-feira, 2 de fevereiro de 2012 16:02
    quinta-feira, 2 de fevereiro de 2012 14:56
    Moderador

Todas as Respostas

  • Como estas a gravar no txt?

     


    One word frees us of all the weight and pain of life: that word is love.
    quinta-feira, 2 de fevereiro de 2012 14:31
    Moderador
  • SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "Arquivos Text|*.txt";
    sfd.FileName = ("receber_" + DateTime.Now.Day + DateTime.Now.Month) ;
      if (sfd.ShowDialog() == DialogResult.OK)
       {
         SqlCommand cmd = new SqlCommand(sql, conn);
         SqlDataReader dr = cmd.ExecuteReader();
         StringBuilder sb = new StringBuilder();
         StreamWriter sw = new StreamWriter(sfd.FileName);
    
         decimal[] dados = new decimal[7000];// progressBar
         progressBar1.Maximum = dados.Length;//progressBar
         progressBar1.Visible = true;
         masktxtdata.Enabled = false; //desabilitado
         masktxtdatafinal.Enabled = false; //desabilitado
         btngerar.Enabled = false; // desabilitado
    
         decimal interacao = 0, total = 0;
    
          if (dr.HasRows)
           {
             while (dr.Read() & interacao <= dados.Length)
              {
                progressBar1.Value = (int)interacao;
                Application.DoEvents();
                                                                        
                total = (decimal)dr["valor"];
                interacao++;
                sb.AppendLine(dr["informacao"].ToString());
                sw.Flush();
               }
            }                                                  
    dr.Close();
    sw.Write(sb);
    
    total = Math.Round(total,2);// diminui para duas casas decimais: 1024.25
                                                                                        
    string vtotal = total.ToString();
    total = vtotal.Replace(".", "");     //troca (ponto) por vazio
    vtotal = vtotal.PadLeft(15,'0');     //esquerda
    vtotal = vtotal.PadRight(694,' ');  //direita
                                
            
    sw.Write("[9999{0}]", vtotal);
                              
                               
                                
    sw.Close();
    
    progressBar1.Visible = false;
                                
                                
    MessageBox.Show("Arquivo Gerado com Sucesso!", "Concluído",
                              MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                        else
                        {
                            conn.Close();
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    finally
                    {
                        conn.Close();//Finaliza conxão com DB.
                        Application.Exit();// fechar programa.
                    }
    

    Segue meu Código pra melhor entendimento Malange! =)
    quinta-feira, 2 de fevereiro de 2012 14:39
  • Este comando pega um registo de cada vez:  SqlDataReader dr = cmd.ExecuteReader();

    usa Dataset ou table, enche o dataset ou table depois faz loop. e veja o k acontece.


    One word frees us of all the weight and pain of life: that word is love.
    • Marcado como Resposta Fabio Felix quinta-feira, 2 de fevereiro de 2012 16:02
    quinta-feira, 2 de fevereiro de 2012 14:56
    Moderador
  • Ahh muito obrigado!

    Sera que vc poderia me mostrar como eu faço pra encher o dataset + loop!?

     

    quinta-feira, 2 de fevereiro de 2012 15:04
  • Fabio

    Notei no seu codigo que vc seta o array em 7 mil 

        decimal[] dados = new decimal[7000];// progressBar

    e depois você pega abaixo no while e limita no tamanho,

    1-Você pode alterar o tamanho do mesmo para o tamanho do arquivo e acho que sua aplicação importaria dependendo o tamanho do arquivo nao a um tamanho fixo.

    2-mudar o while de

           while (dr.Read() & interacao <= dados.Length)

      para algo tipo

          While Not dr.EOF

    Para datareader eu tenho usado EOF.


     


    Roberto Analista de Desenvolvimento msn rsf88@hotmail.com skype robertosf1
    • Sugerido como Resposta Robertosf1 quinta-feira, 2 de fevereiro de 2012 17:20
    quinta-feira, 2 de fevereiro de 2012 17:08