Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Antoliv

Comparação de um campo DataReader com uma variável

Mensagens Recomendadas

Antoliv

Boas Tardes a todos.

Este é o meu primeiro posto e como iniciante em C# as dúvidas são muitas... Cá vai a 1ª:

Pretendo introduzir dados numa classe através de uma base de dados SQL, estou a utilizar um data reader para ir buscar os dados de uma tabela dessa base de dados para alimentar a classe.

Só que quando estou a fazer o set da propriedade da classe com o campo do data reader, dá-me erro.

O que eu quero fazer é o seguinte, colocar o conteudo do campo rendimentos em setrendimentos: A.setrendimentos(drRosto["rendimentos"], aonde A é a classe, setrendimentos a propriedade e drRosto o data Reader.

A propriedade setrendimentos é do tipo decimal e como o tipo do campo rendimentos é do tipo objecto, dá-me sempre erro em que não consegue cnverter object to decimal.

Ajudem-me por favor....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Antoliv

Pronto fica aqui o evento Load  da pagina web em que quero efectuar a leitura das tabelas num datareader para depois colocar numa classe e a seguir fazer comparações... Os erros que me dão são dentro dos ciclos while, por exemplo : "Error 2 Argument 1: cannot convert from 'object' to 'string'" ou "Error 14 Argument 1: cannot convert from 'object' to 'decimal'"

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["irsConnectionString1"].ConnectionString);

        SqlCommand select = new SqlCommand();

        select.Connection = con;

        select.CommandText = "SELECT * FROM rosto";

        con.Open();
        SqlDataReader drRosto = select.ExecuteReader();

        dados_rosto r = new dados_rosto();

        while (drRosto.Read())
        {
            r.setresidenciaFiscal(drRosto["resid_fiscal"]);
            r.setResidenteUEouEEE(drRosto["residente_ue_ou_eee"]);
            r.setArt68_ou_17A(drRosto["art68_ou_17a"]).ToString;
            r.setRegimeNaoCasados_ou_TributacaoConjunta(drRosto["regime_nao_casados_ou_tributacao_conjunta"]);
            r.setestadoCivil(drRosto["estado_civil"]);

        }

        con.Close();

        select.CommandText = "SELECT * FROM anexoA";

        con.Open();

        SqlDataReader drAnexoA = select.ExecuteReader();

        AnexoA A = new AnexoA();

        while (drAnexoA.Read())
        {
            A.setrendimentosNIFA(decimal.Parse(drAnexoA["rendimentosNIFA"]));
            A.setretencoesNIFA(drAnexoA["retencoesNIFA"]);

        }

        con.Close();
        



        if (r.getestadoCivil() == "0" || r.getestadoCivil() == "3")
        {
            txtlblCoefConj.Text = "2";

        }
        else
        {
           
            deducaoA2011 = salarioMinimo2011 * 12 * 72 / 100;

            if (deducaoA2011 <= A.getrendimentosNIFA())
            {
                rendimentoLiquido = rendimentoLiquido - deducaoA2011;
            }
            else
            {
                rendimentoLiquido = 0;
            }

            switch (A.getCodDespesa1())
            {
                case "409":
                   if (A.getQuotSindEOutDed1()< (A.getrendimentosNIFA())/100) 
                   {
                       quotSindicais= A.getQuotSindEOutDed1()+(A.getQuotSindEOutDed1()*50/100);
                       rendimentoLiquido=rendimentoLiquido-quotSindicais;
                   }
                   else
                   {
                       quotSindicais=(A.getrendimentosNIFA())/100+((A.getrendimentosNIFA())/100)*50/100;
                   }
                    break;
                case "410":
                    
                    break;
                case "411":
                    
                    break;
                case "412":
                    
                    break;
                case "413";
                Console.WriteLine("Default case");
                break;
            }
        }

        
    }

Grato pela vossa atenção...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Antoliv

Boas, em relação aos campos string já consegui resolver o problema basta colocar ToString() no final, ou seja:

while (drRosto.Read())
        {
            r.setresidenciaFiscal(drRosto["resid_fiscal"].ToString());
            r.setResidenteUEouEEE(drRosto["residente_ue_ou_eee"].ToString());
            r.setArt68_ou_17A(drRosto["art68_ou_17a"].ToString());
            r.setRegimeNaoCasados_ou_TributacaoConjunta(drRosto["regime_nao_casados_ou_tributacao_conjunta"].ToString());
            r.setestadoCivil(drRosto["estado_civil"].ToString());

        }

O problema é quando a propriedade que eu quero igualar ao campo do data redaer é inteira ou decimal, como por exemplo :

while (drAnexoA.Read())
        {
            A.setrendimentosNIFA(decimal.Parse(drAnexoA["rendimentosNIFA"]));
            A.setretencoesNIFA(drAnexoA["retencoesNIFA"]);

        }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Caça

Tens de converter, basta colocar o tipo de dados antes, tipo

A.setrendimentosNIFA((decimal)drAnexoA["rendimentosNIFA"]);


Pedro Martins

Não respondo a duvidas por PM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Caça

Para utilizares o Parse, tinhas de ter uma string e neste caso tens um object, é por isso que não estava a dar.


Pedro Martins

Não respondo a duvidas por PM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.