none
Asynchronous Processing RRS feed

  • Pergunta

  • Estou tentando utilizar este codigo e da o seguinte error,

    Este comando requer uma conexão assíncrona. Defina "Asynchronous Processing=true" na sequência de conexão.

    na linha

    cmd.BeginExecuteReader();

     public void ListaDados()
            {
                
                db = new DBConexao();
                db.abreConexao();
    
    
                if (db.con.State == ConnectionState.Open)
                {
                    cmd = new SqlCommand("select dpfempenhodata,SUM(dpfempenhovalor) - SUM(dpfempenhoanuladovalor+dpfpagoanulado) as pago from tbdpf2 where YEAR(dpfempenhodata) = @ano and MONTH(dpfempenhodata) =@mes group by dpfempenhodata order by dpfempenhodata ", db.con);
                    cmd.Parameters.Add("@ano", SqlDbType.VarChar).Value = "2011";
                    cmd.Parameters.Add("@mes", SqlDbType.VarChar).Value = "01";
                    cmd.BeginExecuteReader();
                    
                   


    adicionei o   con = new SqlConnection(@"Server = HENRIQUE-PC\CGE10;Database = Servidores; Trusted_Connection = True; Asynchronous Processing=true"); na string de conexao ele passou...

    no entanto na proxima linha ele da error

    using (dr = cmd.ExecuteReader())

    A execução do comando não pode prosseguir devido a uma operação assíncrona pendente que já está em andamento.

                    {
                        if (dr.HasRows)
                        {
                            while (dr.Read())
                            {
                                da = new DadosEstatistica();
                                da.Pago = Convert.ToDouble(dr["pago"].ToString());
                                da.EmpenhoData = Convert.ToDateTime(dr["dpfempenhodata"].ToString());
                                da.Mes = da.EmpenhoData.ToString("MM");
                                da.TotalPago = da.TotalPago + da.Pago;

                            }
                        }
                    }

    A execução do comando não pode prosseguir devido a uma operação assíncrona pendente que já está em andamento.

    nao entendi foi nda depois disso :S

    alguem pdria ajudar?

    grato;


    Att Henrique Neto


    quinta-feira, 19 de abril de 2012 19:01

Respostas

  • Ola Henrique,

    Eu acredito que o SqlDataReader não é uma boa opção neste cenário pois ele precisa manter uma conexão aberta com o banco de dados enquanto itera os dados do seu While.

    Neste caso acho que a melhor forma é utiliza um SqlDataAdapter, capturar os dados da base de dados e trabalhar com eles de modo offline.

    Veja se isto ajuda:

    if (db.con.State == ConnectionState.Open)
    {
    	cmd = new SqlCommand("select dpfempenhodata,SUM(dpfempenhovalor) - SUM(dpfempenhoanuladovalor+dpfpagoanulado) as pago from tbdpf2 where YEAR(dpfempenhodata) = @ano and MONTH(dpfempenhodata) =@mes group by dpfempenhodata order by dpfempenhodata ", db.con);
    	cmd.Parameters.Add("@ano", SqlDbType.VarChar).Value = "2011";
    	cmd.Parameters.Add("@mes", SqlDbType.VarChar).Value = "01";
    
    	DataTable dt = new DataTable();
    	SqlDataAdapter da = new SqlDataAdapter(cmd);
    	da.Fill(dt);
    
    	foreach(DataRow row in dt.Rows)
    	{
    		da = new DadosEstatistica();
                    da.Pago = Convert.ToDouble(row["pago"].ToString());
                    da.EmpenhoData = Convert.ToDateTime(row["dpfempenhodata"].ToString());
                    da.Mes = da.EmpenhoData.ToString("MM");
                    da.TotalPago = da.TotalPago + da.Pago;
    	}
    }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 20 de abril de 2012 02:31
    Moderador

Todas as Respostas

  • Ola Henrique,

    Eu acredito que o SqlDataReader não é uma boa opção neste cenário pois ele precisa manter uma conexão aberta com o banco de dados enquanto itera os dados do seu While.

    Neste caso acho que a melhor forma é utiliza um SqlDataAdapter, capturar os dados da base de dados e trabalhar com eles de modo offline.

    Veja se isto ajuda:

    if (db.con.State == ConnectionState.Open)
    {
    	cmd = new SqlCommand("select dpfempenhodata,SUM(dpfempenhovalor) - SUM(dpfempenhoanuladovalor+dpfpagoanulado) as pago from tbdpf2 where YEAR(dpfempenhodata) = @ano and MONTH(dpfempenhodata) =@mes group by dpfempenhodata order by dpfempenhodata ", db.con);
    	cmd.Parameters.Add("@ano", SqlDbType.VarChar).Value = "2011";
    	cmd.Parameters.Add("@mes", SqlDbType.VarChar).Value = "01";
    
    	DataTable dt = new DataTable();
    	SqlDataAdapter da = new SqlDataAdapter(cmd);
    	da.Fill(dt);
    
    	foreach(DataRow row in dt.Rows)
    	{
    		da = new DadosEstatistica();
                    da.Pago = Convert.ToDouble(row["pago"].ToString());
                    da.EmpenhoData = Convert.ToDateTime(row["dpfempenhodata"].ToString());
                    da.Mes = da.EmpenhoData.ToString("MM");
                    da.TotalPago = da.TotalPago + da.Pago;
    	}
    }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 20 de abril de 2012 02:31
    Moderador
  • Ola Henrique,

    Eu acredito que o SqlDataReader não é uma boa opção neste cenário pois ele precisa manter uma conexão aberta com o banco de dados enquanto itera os dados do seu While.

    Neste caso acho que a melhor forma é utiliza um SqlDataAdapter, capturar os dados da base de dados e trabalhar com eles de modo offline.

    Veja se isto ajuda:

    if (db.con.State == ConnectionState.Open)
    {
    	cmd = new SqlCommand("select dpfempenhodata,SUM(dpfempenhovalor) - SUM(dpfempenhoanuladovalor+dpfpagoanulado) as pago from tbdpf2 where YEAR(dpfempenhodata) = @ano and MONTH(dpfempenhodata) =@mes group by dpfempenhodata order by dpfempenhodata ", db.con);
    	cmd.Parameters.Add("@ano", SqlDbType.VarChar).Value = "2011";
    	cmd.Parameters.Add("@mes", SqlDbType.VarChar).Value = "01";
    
    	DataTable dt = new DataTable();
    	SqlDataAdapter da = new SqlDataAdapter(cmd);
    	da.Fill(dt);
    
    	foreach(DataRow row in dt.Rows)
    	{
    		da = new DadosEstatistica();
                    da.Pago = Convert.ToDouble(row["pago"].ToString());
                    da.EmpenhoData = Convert.ToDateTime(row["dpfempenhodata"].ToString());
                    da.Mes = da.EmpenhoData.ToString("MM");
                    da.TotalPago = da.TotalPago + da.Pago;
    	}
    }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    Deu a mesma coisa Fernando quando troquei, 

               if (db.con.State == ConnectionState.Open)
                {
                    cmd = new SqlCommand("select dpfempenhodata,SUM(dpfempenhovalor) - SUM(dpfempenhoanuladovalor+dpfpagoanulado) as pago from tbdpf2 where YEAR(dpfempenhodata) = @ano and MONTH(dpfempenhodata) =@mes group by dpfempenhodata order by dpfempenhodata ", db.con);
                    cmd.Parameters.Add("@ano", SqlDbType.VarChar).Value = "2011";
                    cmd.Parameters.Add("@mes", SqlDbType.VarChar).Value = "01";
                    cmd.BeginExecuteReader();
    
                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
    
                    foreach (DataRow row in dt.Rows)
                    {
                        dados = new DadosEstatistica();
                        if (dr["pago"] != null) dados.Pago = Convert.ToDouble(dr["pago"].ToString());
                        if (dr["dpfempenhodata"] != null) dados.EmpenhoData = Convert.ToDateTime(dr["dpfempenhodata"].ToString());
                        dados.Mes = dados.EmpenhoData.ToString("MM");
                        dados.TotalPago = dados.TotalPago + dados.Pago;
    
                    }
                }
            }

    na linha da.Fill(dt);

    ocorre o mesmo error

    grato;


    Att Henrique Neto

    sexta-feira, 20 de abril de 2012 11:31
  • Olá Henrique,

    Tente remover a linha "cmd.BeginExecuteReader();" e vamos ver como se comporta.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 20 de abril de 2012 11:36
    Moderador
  • Foi meu amigo Obrigado.

    Att Henrique Neto

    sexta-feira, 20 de abril de 2012 12:42