none
Data Reader RRS feed

  • 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

    quinta-feira, 19 de abril de 2012 13:55

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);
    			}
    		}
    	}
    }

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

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
                {
                    
                }
    }

    quinta-feira, 19 de abril de 2012 14:50
  • ja olhei esse site amigo, nao diz o que eu queria.

    Att Henrique Neto

    quinta-feira, 19 de abril de 2012 16:46
  • 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

    quinta-feira, 19 de abril de 2012 16:54
  • 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);
    			}
    		}
    	}
    }

    quinta-feira, 19 de abril de 2012 19:44
  • 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);
    			}
    		}
    	}
    }

    Eu quero fazer esta consulta e jogar no objeto, pq depois quero tratar ele e inserir no banco da forma que desejo tratada como quero .... vo testar desse seu modo. grato;

    Att Henrique Neto

    quinta-feira, 19 de abril de 2012 19:57
  • 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


    quinta-feira, 19 de abril de 2012 20:01
  • @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?

    quinta-feira, 19 de abril de 2012 20:43
  • @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

    sexta-feira, 20 de abril de 2012 11:33
  • Qual e o problema agora? queres enserir, queres tratar?


    Se o amor fosse pecado, quem seria INOCENTE?

    sexta-feira, 20 de abril de 2012 15:06
  • ja resolvi, tratar em seguida inserir no banco depois de tradado.

    obrigado;


    Att Henrique Neto

    sexta-feira, 20 de abril de 2012 17:43