Usuário com melhor resposta
C # - SQLDATAREADER

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
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
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 !
-
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