none
C # - SQLDATAREADER RRS feed

  • Pergunta

  • Boa Noite

    No método abaixo, quando consulto o somatório de horas,minutos e segundos por uma data, se a data  que existe ele me retorna correto, mas quando consulto uma data inexistente retorna o erro?

     

    “input string was not in a correct format”

     

    Será que alguém saberia me informar onde está o erro?

     

    CODIGO

     

    public void tempoDeConexaoPorData()

            {

                try

                {

                    conectaBanco();

                    comando = new SqlCommand("select SUM(DATEPART(hour.tabela))as horas, SUM(DATEPART(minute, tabela)) as minutos , SUM(DATEPART(second, tabela)) as segundos from conexao WHERE CONVERT(VARCHAR(12), tabela,103) = '" + mskData.Text + "'", conexao);

                    var Dr = comando.ExecuteReader();

                    if (Dr.HasRows)

                    {

                        while (Dr.Read())

                        {

                            horas1 = Convert.ToInt32(Dr["horas"].ToString());

                            minutos1 = Convert.ToInt32(Dr["minutos"].ToString());

                            segundos1 = Convert.ToInt32(Dr["segundos"].ToString());

                            horas1 = minutos1 / 60;

                            minutos1 = segundos1 / 60;

                            minutos1 = minutos1 % 60;

                            segundos1 = segundos1 % 60;

                            resultado1 = (+horas1 + ":" + minutos1 + ":" + segundos1).ToString();

                            txtTempoAteData.Text = resultado1.ToString();

                            break;

                        }

                    }

                    else

                    {

                        txtTempoAteData.Text = "0";

                    }

                }

     

                catch (Exception erro)

                {

                    MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");

     

                }

    }

     

    FIM DO CODIGO

    quinta-feira, 8 de maio de 2014 00:29

Respostas

  • Boa Noite

    Consegui resolver da seguinte forma abaixo, onde as variáveis horas1, minutos1 e segundos1 foram declaradas como string:

    Obrigado


                    conectaBanco();
                    comando = new SqlCommand("select SUM(DATEPART(hour,tempodeConexao))as horas, SUM(DATEPART(minute,tempodeConexao)) as minutos , SUM(DATEPART(second,tempodeConexao)) as segundos from conexao WHERE CONVERT(VARCHAR(12),tempodeconexao,103) = '" + mskData.Text + "'", conexao);
                    var Dr = comando.ExecuteReader();
                    while (Dr.Read())
                    {
                        horas1 = Dr["horas"].ToString();
                        minutos1 = Dr["minutos"].ToString();
                        segundos1 = Dr["segundos"].ToString();
                        if (horas1 != null && horas1 !="" && minutos1 != null && minutos1 !="" && segundos1 != null && segundos1 !="")
                        {
                            horas1 = (Convert.ToInt32(minutos1) / 60).ToString();
                            minutos1 = (Convert.ToInt32(segundos1) / 60).ToString();
                            minutos1 = (Convert.ToInt32(minutos1) % 60).ToString();
                            segundos1 = (Convert.ToInt32(segundos1) % 60).ToString();
                            resultado1 = (horas1 + ":" + minutos1 + ":" + segundos1).ToString();
                            txtTempoAteData.Text = resultado1.ToString();
                        }
                        else
                        {
                            txtTempoAteData.Text = "00:00:00";
                          
                        }

                            
    • Marcado como Resposta DilsonDG sexta-feira, 9 de maio de 2014 01:24
    sexta-feira, 9 de maio de 2014 01:24

Todas as Respostas

  • Creio que o jeito mais fácil é usar tipo Nullable, basta declarar sua variavel horas minutos segundos como int? como nullable veja exemplo :

    while (reader.Read())
                        {
                            int? horas1 = reader["horas"] as int?;
                            if (horas1.HasValue)
                                {
        horas1 = minutos1 / 60;
    }
                        }

    Adapte para os minutos e segundos que vai funcionar !

    quinta-feira, 8 de maio de 2014 00:52
  • Boa Noite

    Consegui resolver da seguinte forma abaixo, onde as variáveis horas1, minutos1 e segundos1 foram declaradas como string:

    Obrigado


                    conectaBanco();
                    comando = new SqlCommand("select SUM(DATEPART(hour,tempodeConexao))as horas, SUM(DATEPART(minute,tempodeConexao)) as minutos , SUM(DATEPART(second,tempodeConexao)) as segundos from conexao WHERE CONVERT(VARCHAR(12),tempodeconexao,103) = '" + mskData.Text + "'", conexao);
                    var Dr = comando.ExecuteReader();
                    while (Dr.Read())
                    {
                        horas1 = Dr["horas"].ToString();
                        minutos1 = Dr["minutos"].ToString();
                        segundos1 = Dr["segundos"].ToString();
                        if (horas1 != null && horas1 !="" && minutos1 != null && minutos1 !="" && segundos1 != null && segundos1 !="")
                        {
                            horas1 = (Convert.ToInt32(minutos1) / 60).ToString();
                            minutos1 = (Convert.ToInt32(segundos1) / 60).ToString();
                            minutos1 = (Convert.ToInt32(minutos1) % 60).ToString();
                            segundos1 = (Convert.ToInt32(segundos1) % 60).ToString();
                            resultado1 = (horas1 + ":" + minutos1 + ":" + segundos1).ToString();
                            txtTempoAteData.Text = resultado1.ToString();
                        }
                        else
                        {
                            txtTempoAteData.Text = "00:00:00";
                          
                        }

                            
    • Marcado como Resposta DilsonDG sexta-feira, 9 de maio de 2014 01:24
    sexta-feira, 9 de maio de 2014 01:24