2012-06-27 34 views
0

將時間值out of datetime列轉換爲12小時格式我的應用程序允許用戶進行會議約會。約會保存到數據庫之前,用戶從日曆控件中選擇一個日期。選擇日期後,頁面應該從數據庫中獲取當天的約會列表,並檢查每個記錄約會的時間。任何已經預訂的時隙都將從DropDownList中移除,用戶將從中選擇一個方便的時間。DataReader.Read

問題出現在我的時間比較中。以下大部分代碼旨在將日期/時間值分開以獲得我可以比較的內容。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If Not IsPostBack Then 

     PopulateTime() 
    End If 
End Sub 

Protected Sub PopulateTime() 

    Dim db As New Database 

    Dim sql As String = "select apptinterval from centres where centreid = @id" 

    Dim args As New List(Of SqlParameter) 
    args.Add(New SqlParameter("@id", Session("CentreID"))) 

    Dim dr As SqlDataReader = db.GetReader(sql, args.ToArray) 

    Dim interval As Integer = 0 
    If dr.Read Then 
     interval = dr("apptinterval") 
    End If 

    Dim time = TimeSpan.FromHours(8) 
    While time < TimeSpan.FromHours(17) 
     time += TimeSpan.FromMinutes(interval) 

     ddlAppointmentTime.Items.Add(New ListItem(time.ToString, time.ToString)) 
    End While 
End Sub 

Protected Sub calAppointmentDate_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles calAppointmentDate.SelectionChanged 

    Dim seldate As String = Left(calAppointmentDate.SelectedDate, 10) 
    Dim dateargs() As String = seldate.ToString.Split("/") 
    Dim newdate As String = dateargs(0) & "-" & dateargs(1) & "-" & dateargs(2) 

    GetTimes(newdate) 
End Sub 

Protected Sub GetTimes(ByVal TargetDate As String) 

    Dim db As New Database 

    Dim args As New List(Of SqlParameter) 
    Dim sql As String = "select apptdate from appointments where apptdate between @date1 and @date2 order by apptdate" 

    args.Add(New SqlParameter("@date1", TargetDate & " 12:00:00")) 
    args.Add(New SqlParameter("@date2", TargetDate & " 23:59:59")) 

    Dim dr As SqlDataReader = db.GetReader(sql, args.ToArray) 

    If dr.HasRows Then 
     dr.Read() 
     For i As Integer = 0 To ddlAppointmentTime.Items.Count - 1 

      If Left(ddlAppointmentTime.Items(i).Value, 5) = Mid(dr("apptdate"), 12, 5) Then 
       ddlAppointmentTime.Items.RemoveAt(i) 
      End If 

     Next 
    End If 
    dr.Close() 

End Sub 

如果這裏的循環,被返回Mid(dr("apptdate"), 12, 5)價值爲01:00。數據庫中的實際值爲13:00

任何人都可以提出爲什麼這種轉換髮生?它導致比較失敗,所以,該時隙不會從DropDownList中刪除。

在此先感謝!

回答

0

看來這是它做的Mid。此處涉及的字符串轉換更改了該值。

我工作圍繞這通過移除Mid和改變的SQL語句如下:

Dim sql As String = "select left(CONVERT(time, apptdate, 14), 5) as apptdate from appointments" 

Dim dr As SqlDataReader = db.GetReader(sql, args.ToArray) 

If dr.HasRows Then 
    While dr.Read 

     For i As Integer = 0 To ddlAppointmentTime.Items.Count - 1 

      If Left(ddlAppointmentTime.Items(i).Value, 5) = dr("apptdate") Then 
       ddlAppointmentTime.Items.RemoveAt(i) 
      End If 

     Next 
    End While 

End If 
dr.Close() 
相關問題