2017-02-19 2 views
0

This was the error msg im gettingenter image description here Ich habe eine Datenbank mit einer Zeile "Total_Time" (Zeit). Es ist im Format HH: MM: SS. Ich brauche den Code, um die "Total_time" in Minuten zu konvertieren.So konvertieren Sie die Gesamtzeit in Minuten

Zum Beispiel, wenn Total_time = 01:30:00, sollte die Antwort Total_minutes = 90, sein und ich möchte die total_minutes mit "Other" (int-Variable) multiplizieren.

Unten ist das, was ich versucht habe:

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 

aber wenn ich nichts klicken Label7 geschieht, ist keine Werte Vielen Dank im Voraus anzeigt.

+0

Und was ist das Problem? – Roope

+0

Ich habe diesen Code für eine Schaltfläche eingefügt und wenn ich nichts klicken geschieht label7 zeigt keine Werte –

+1

Meinst du nicht am Ende zu setzen Label7.Text = strmin –

Antwort

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

ähnliche Fehler zu vermeiden, würde ich empfehlen 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

Ich bin neugierig - warum antwortest du, wenn du die Frage nicht gelesen hast? – Chris

+0

@Chris, weil ich den Titel gelesen habe, und hilfreich für andere sein könnte, die nach etwas Ähnlichem suchen – Slai

+0

Ich weiß nicht, wie dieser Code mit meinem Code passt, bitte helfen Sie ... –

0

Versuchen unter

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 

mit Wenn es die Zeit mehr als 24:00:00, verwenden Sie folgenden Code

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

Noch nichts wird auf label7.text –

+0

angezeigt @vigneshs Ich denke, es sollte sein "Wenn dr.Read() Then" Anweisung, wenn Sie nur einen Datensatz lesen und stellen Sie sicher, dass die Abfrage ein Ergebnis zurückgibt – Slai

+0

DId wählen Sie eine richtige ID in textbox5 ??? –

0

Wechseln Sie nicht zu Zeichenfolgen ... und verwenden Sie einen Zeitbereich

Wenn sich Ihr Etikett nie ändert, dann muss die Routine einen Fehler enthalten. Überprüfen Sie den Fehler anhand der catch-Anweisung. Aus Ihrem Bild sieht es jedoch so aus, als hätte es keinen Wert.

Und Sie sollten IMMER Test für dbnull bei der Verwendung von Datenbanken. DBNull hat einige seltsame Verhaltensweisen in mathematischen und booleschen Vergleichen.

Ersetzen Sie Ihre while-Schleife mit diesem

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: Ihre Frage sagt mehrfach von anderen aber Ihre Form/code sagt Hinzufügen ... ich mit der Frage ging.

+0

es wirft ERR –

+0

Ich habe die fehlermeldung –

+0

uplaoade ich war krank und gefallen Ich bin nicht in der Lage, für den Sumstag zu arbeiten, aber ich bin jetzt in Ordnung, und ich habe alle oben genannten Codes versucht und es funktioniert nicht –

Verwandte Themen