Usuário com melhor resposta
Data Reader

Pergunta
-
Eu tenho esse codigo abaixo, que gostaria de inserir em um data reader e em seguida criar um for com aquele reader e ele ir inserindo os resultados no objeto chamado DadosEstatisticas .
public void ListaDados(String ano, String mes) { 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 "); cmd.Parameters.Add("@ano", SqlDbType.Text).Value = ano; cmd.Parameters.Add("@mes", SqlDbType.Text).Value = mes; cmd.BeginExecuteNonQuery(); } else { }
Como eu poderia inserir o comando executado em um reader, e em seguida criar o for com o objeto?
alguem tem algum exemplo?
grato;
Att Henrique Neto
- Movido C. Augusto Proiete [MVP]Moderator sexta-feira, 20 de abril de 2012 15:38 Movido para o forum apropriado (De:C#)
Respostas
-
Henrique.
Qual seria a finalidade dessa consulta? popular um grid ou algum objeto? nesse caso você pode passar o próprio DataReader no Data Source do objeto, caso precise da lista de objetos pode fazer assim:
public void ListaDados(String ano, String mes) { db = new DBConexao(); db.abreConexao(); if (db.con.State == ConnectionState.Open) { List<DadosEstatistica> dados = new List<DadosEstatistica>(); 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 "); cmd.Parameters.Add("@ano", SqlDbType.Text).Value = ano; cmd.Parameters.Add("@mes", SqlDbType.Text).Value = mes; using (SqlDataReader dr = cmd.ExecuteReader()) if (dr.HasRows) { while (dr.Read()) { DadosEstatistica de = new DadosEstatistica(); de.Mes = dr["mes"]; if(dr["pago"] != null) de.Pago = Convert.ToFloat(dr["pago"]); if(dr["dpfempenhodata"] != null) de.EmpenhoData = Convert.ToDateTime(dr["dpfempenhodata"]); if(dr["TotalPago"] != null) de.TotalPago = Convert.ToDouble(dr["TotalPago"]); dados.Add(dr); } } } }
- Marcado como Resposta henriquenetinhoo sexta-feira, 20 de abril de 2012 17:43
Todas as Respostas
-
-
Tenta assim
public void ListaDados(String ano, String mes) { 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 "); cmd.Parameters.Add("@ano", SqlDbType.Text).Value = ano; cmd.Parameters.Add("@mes", SqlDbType.Text).Value = mes; using (SqlDataReader dr = cmd.ExecuteReader()) { if (dr.HasRows) { while (dr.Read()) { //Seu Código } } } } else { } }
-
-
Tenta assim
public void ListaDados(String ano, String mes) { 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 "); cmd.Parameters.Add("@ano", SqlDbType.Text).Value = ano; cmd.Parameters.Add("@mes", SqlDbType.Text).Value = mes; using (SqlDataReader dr = cmd.ExecuteReader()) { if (dr.HasRows) { while (dr.Read()) { //Seu Código } } } } else { } }
Tentei desse modo Diego mais nao consigo na hora do armazenamento dos resultados no objeto....
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace testandoChart.Objeto { public class DadosEstatistica { private String mes; private float pago; private DateTime empenhodata; private double totalpago; private String ano = "2011"; public string Mes { get { return mes; } set { mes = value; } } public float Pago { get { return pago; } set { pago = value; } } public DateTime EmpenhoData { get { return empenhodata; } set { empenhodata = value; } } public Double TotalPago { get { return totalpago; } set { totalpago = value; } } } }
nesse objeto eu nao consigo armazenar os 3dados eskeci d 1 no sql q o sql retorna, q é o ano mes e o valor pago .
eu teria q criar uma lista daquele objeto, já que é mais d 1resultado q retornara?
e como armazenaria essta lista junto com o resultado do dr?
grato
Att Henrique Neto
-
Henrique.
Qual seria a finalidade dessa consulta? popular um grid ou algum objeto? nesse caso você pode passar o próprio DataReader no Data Source do objeto, caso precise da lista de objetos pode fazer assim:
public void ListaDados(String ano, String mes) { db = new DBConexao(); db.abreConexao(); if (db.con.State == ConnectionState.Open) { List<DadosEstatistica> dados = new List<DadosEstatistica>(); 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 "); cmd.Parameters.Add("@ano", SqlDbType.Text).Value = ano; cmd.Parameters.Add("@mes", SqlDbType.Text).Value = mes; using (SqlDataReader dr = cmd.ExecuteReader()) if (dr.HasRows) { while (dr.Read()) { DadosEstatistica de = new DadosEstatistica(); de.Mes = dr["mes"]; if(dr["pago"] != null) de.Pago = Convert.ToFloat(dr["pago"]); if(dr["dpfempenhodata"] != null) de.EmpenhoData = Convert.ToDateTime(dr["dpfempenhodata"]); if(dr["TotalPago"] != null) de.TotalPago = Convert.ToDouble(dr["TotalPago"]); dados.Add(dr); } } } }
- Marcado como Resposta henriquenetinhoo sexta-feira, 20 de abril de 2012 17:43
-
Henrique.
Qual seria a finalidade dessa consulta? popular um grid ou algum objeto? nesse caso você pode passar o próprio DataReader no Data Source do objeto, caso precise da lista de objetos pode fazer assim:
public void ListaDados(String ano, String mes) { db = new DBConexao(); db.abreConexao(); if (db.con.State == ConnectionState.Open) { List<DadosEstatistica> dados = new List<DadosEstatistica>(); 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 "); cmd.Parameters.Add("@ano", SqlDbType.Text).Value = ano; cmd.Parameters.Add("@mes", SqlDbType.Text).Value = mes; using (SqlDataReader dr = cmd.ExecuteReader()) if (dr.HasRows) { while (dr.Read()) { DadosEstatistica de = new DadosEstatistica(); de.Mes = dr["mes"]; if(dr["pago"] != null) de.Pago = Convert.ToFloat(dr["pago"]); if(dr["dpfempenhodata"] != null) de.EmpenhoData = Convert.ToDateTime(dr["dpfempenhodata"]); if(dr["TotalPago"] != null) de.TotalPago = Convert.ToDouble(dr["TotalPago"]); dados.Add(dr); } } } }
Att Henrique Neto
-
Olha como eu fiz Diego ta certo tbm assim?
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(); using (dr = cmd.ExecuteReader()) { if (dr.HasRows) { while (dr.Read()) { dados = new List<DadosEstatistica>(); 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; dados.Add(dr); } } } } else { } }
ele da error na ultima linha quando tento armazenar o dr na lista
Error 1 The best overloaded method match for 'System.Collections.Generic.List<testandoChart.Objeto.DadosEstatistica>.Add(testandoChart.Objeto.DadosEstatistica)' has some invalid arguments C:\Users\henrique\Documents\Visual Studio 2010\Projects\testandoChart\testandoChart\Logic\EstatisticaFinanceira.cs 47 29 testandoChart
Att Henrique Neto
- Editado henriquenetinhoo quinta-feira, 19 de abril de 2012 20:02
-
@Henrique
Eu ainda nao entendi o que voce quer fazer, teu codigo nao faz sentido. Tu fizeste uma pergunta, que nao faz sentido. Foi por isto k o Diogo perguntou, quer encher datagridview, queres fazer o que?
Tu respondeste, quer tratar a informacao e enviar na base de dados? Tu nao consegues enviar informacaio na base de dados usando datareader!
No teu select voce busca dois campos na tabela, depois voce usa parametro com dois valores. Tu nao podes fazer isto. Tens de usar insert ou primeiro vais ter de fazer pesquiza, trazer a informacao, tratar, e usar adapter pra enserir informacao na tabela.
A lista tem erro voce esta a encher a lista com o datareader. Tens de usar o a class"
dados.Add(da);
outra coisa, eu nao vejo sentido neste codigo:
da.Mes = da.EmpenhoData.ToString("MM"); da.TotalPago = da.TotalPago + da.Pago;?
Se o amor fosse pecado, quem seria INOCENTE?
-
@Henrique
Eu ainda nao entendi o que voce quer fazer, teu codigo nao faz sentido. Tu fizeste uma pergunta, que nao faz sentido. Foi por isto k o Diogo perguntou, quer encher datagridview, queres fazer o que?
Tu respondeste, quer tratar a informacao e enviar na base de dados? Tu nao consegues enviar informacaio na base de dados usando datareader!
No teu select voce busca dois campos na tabela, depois voce usa parametro com dois valores. Tu nao podes fazer isto. Tens de usar insert ou primeiro vais ter de fazer pesquiza, trazer a informacao, tratar, e usar adapter pra enserir informacao na tabela.
A lista tem erro voce esta a encher a lista com o datareader. Tens de usar o a class"
dados.Add(da);
outra coisa, eu nao vejo sentido neste codigo:
da.Mes = da.EmpenhoData.ToString("MM"); da.TotalPago = da.TotalPago + da.Pago;?
Se o amor fosse pecado, quem seria INOCENTE?
Malange eu realmente me enganei nao preciso adicionar em lista nenhuma nao, realizando um laço eu ja posso tratar oq desejo e inserir no banco ao mesmo tempo...
essas duas linhas que voce pgt, é oq eu desejo pegar apenas o mes de cada data, e tbm qro o totalpago daquele mês sempre no laco fico somando o totalpago + pago no resultado final do laço aparecera o total pago do mes....
caso esteja enganado me corriga, grato;
Att Henrique Neto
-
-