Usuário com melhor resposta
Asynchronous Processing

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
- Editado henriquenetinhoo quinta-feira, 19 de abril de 2012 19:08
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- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 20 de abril de 2012 10:49
- Marcado como Resposta henriquenetinhoo sexta-feira, 20 de abril de 2012 12:42
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- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 20 de abril de 2012 10:49
- Marcado como Resposta henriquenetinhoo sexta-feira, 20 de abril de 2012 12:42
-
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
-
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 -