2017-02-19 1 views
0

This was the error msg im gettingenter image description here У меня есть база данных со строкой «Total_Time» (время). Это в формате ЧЧ: ММ: СС. Мне нужен код для преобразования «Total_time» в минуты.Как конвертировать общее время в минуты

Например, если Total_time = 01:30:00, ответ должен быть Total_minutes = 90, , и я хочу умножить total_minutes на «Other» (int variable).

Ниже то, что я пробовал:

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 


    con = New System.Data.SqlClient.SqlConnection 
    Try 


     con.ConnectionString = "Data Source=Vicky-pc\sqlexpress;Initial Catalog=customer_details;Integrated Security=True;Pooling=False" 
     con.Open() 


     Dim cm As SqlClient.SqlCommand 
     cm = New SqlClient.SqlCommand("SELECT * FROM customer_details WHERE [email protected]", con) 
     cm.Parameters.AddWithValue("@id", TextBox5.Text) 
     dr = cm.ExecuteReader() 
     While dr.Read() 
      Dim tt As Double 
      tt = dr("Total_Time").ToString 
      Dim other As Double 
      other = dr("Other").ToString 

      Dim str() As String 
      Dim strmin As Double 
      str = Split(tt.ToString, ":") 
      strmin = (CDbl(str(1)) * 60 + CDbl(str(2)) + CDbl(str(3))/60).ToString 

      Dim total As Decimal 
      total = strmin + other 
      Label7.Text = total.ToString 
     End While 
    Catch ex As Exception 

    End Try 
End Sub 

, но когда я нажимаю ничего не происходит label7 не отображает любые значения Спасибо заранее.

+0

И в чем проблема? – Roope

+0

Я вставил этот код для кнопки, и когда я нажимаю, ничего не происходит. Label7 не показывает никаких значений. –

+1

Не хотите ли в конце поставить Label7.Text = strmin –

ответ

2
Dim Total_minutes As Double = CDate("1:23:45").TimeOfDay.TotalMinutes   ' 83.75 

Чтобы избежать подобных ошибок, я настоятельно рекомендую использовать Option Strict

Dim Total_Time As DateTime = Convert.ToDateTime(dr!Total_Time) 
Dim Total_minutes# = Total_Time.TimeOfDay.TotalMinutes 

Dim Other# = Val(dr!Other) 
Dim total# = Total_minutes * Other 

Label7.Text = total.ToString 
+0

Мне любопытно - почему вы отвечаете, если не прочитали вопрос? – Chris

+0

@ Крис, потому что я прочитал название и мог бы быть полезным для других, которые ищут что-то подобное. – Slai

+0

Я не знаю, как этот код подходит моему коду, пожалуйста, помогите ..... –

0

Попробуйте ниже

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 

    con = New System.Data.SqlClient.SqlConnection 
    Try 
     con.ConnectionString = "Data Source=Vicky-pc\sqlexpress;Initial Catalog=customer_details;Integrated Security=True;Pooling=False" 
     con.Open() 

     Dim cm As SqlClient.SqlCommand 
     cm = New SqlClient.SqlCommand("SELECT * FROM customer_details WHERE [email protected]", con) 
     cm.Parameters.AddWithValue("@id", TextBox5.Text) 
     dr = cm.ExecuteReader() 
     While dr.Read()  
      Dim other As TimeSpan   
      Dim tt As TimeSpan 

      If TimeSpan.TryParse(dr("Total_Time"), tt) Then 
       If TimeSpan.TryParse(dr("Other"), other) Then 
        tt = tt.Add(other) 
       Else 
        'Do something like show error message for incorrect data for dr("Other") 
       End If 
       Label7.Text = tt.TotalMinutes.ToString 
      Else 
       'Do something like show error message for incorrect data for dr("Total_Time") 
      End If 
     End While 
    Catch ex As Exception 

    End Try 
End Sub 

Если время больше, чем 24:00:00, используйте ниже код

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 

    con = New System.Data.SqlClient.SqlConnection 
    Try 
     con.ConnectionString = "Data Source=Vicky-pc\sqlexpress;Initial Catalog=customer_details;Integrated Security=True;Pooling=False" 
     con.Open() 

     Dim cm As SqlClient.SqlCommand 
     cm = New SqlClient.SqlCommand("SELECT * FROM customer_details WHERE [email protected]", con) 
     cm.Parameters.AddWithValue("@id", TextBox5.Text) 
     dr = cm.ExecuteReader() 
     While dr.Read()  
      Try 
       Dim dataTime As String = dr("Total_Time").ToString 
       dataTime = dataTime.Split("."c)(0).ToString 
       Dim tt As New TimeSpan(Integer.Parse(dataTime.Split(":"c)(0)), Integer.Parse(dataTime.Split(":"c)(1)), Integer.Parse(dataTime.Split(":"c)(2))) 
       dataTime = dr("Other").ToString 
       dataTime = dataTime.Split("."c)(0).ToString 
       Dim other As New TimeSpan(Integer.Parse(dataTime.Split(":"c)(0)), Integer.Parse(dataTime.Split(":"c)(1)), Integer.Parse(dataTime.Split(":"c)(2))) 
       tt = tt.Add(other) 
       dataTime = tt.TotalMinutes.ToString 

      Catch ex As Exception 
       'do something here as string is not a time 
      End Try 
     End While 
    Catch ex As Exception 

    End Try 
End Sub 
+0

Все еще ничего не отображается на label7.text –

+0

@vigneshs Я думаю, что это должно быть 'If dr.Read() Then' statement, если вы читаете только одну запись и убедитесь, что запрос возвращает какой-либо результат. – Slai

+0

DId u выберите правильный идентификатор в текстовом поле5 ??? –

0

Не переходите к строкам ... и используйте Timespan

Если ваш ярлык никогда не изменяется, то процедура должна быть ошибочной, проверьте ошибку из инструкции catch. Однако из вашего изображения выглядит, что «Другое» не имеет значения.

И вы должны ALWAYS тест для dbnull при использовании баз данных. DBNull имеет некоторые странные поведения в Math и Boolean сравнения.

Замените время цикла с этим

If Not Dr.read OrElse IsDBNull(Dr("Total_time")) OrElse IsDBNull(Dr("Other")) Then 
     Label7.text = "ERR" 
    Else 
     Dim ts As TimeSpan = TimeSpan.Parse(dr("Total_time").ToString) 
     Label7.text = (ts.TotalMinutes * Dr("Other")).ToString 
    End If 

PS: Ваш вопрос говорит умножаем на другой, но ваша форма/код говорит Добавить ... Я пошел с вопросом.

+0

это бросание ERR –

+0

У меня uplaoaded сообщение об ошибке –

+0

Я заболел и заболел, я не могу работать в течение дня, но теперь я в порядке, и я пробовал все вышеперечисленные коды и не работал –

Смежные вопросы