2012-06-27 4 views
0

내 응용 프로그램에서는 사용자가 약속을 잡을 수 있습니다. 약속이 데이터베이스에 저장되기 전에 사용자는 Calendar 컨트롤에서 날짜를 선택합니다. 날짜가 선택되면 페이지는 해당 날짜의 약속 목록을 데이터베이스에서 가져와 각각의 기록 된 약속 시간을 검사해야합니다. 이미 예약 된 모든 타임 슬롯은 DropDownList에서 제거되어 사용자가 편리한 시간을 선택할 수 있습니다.DataReader.Read 후에 datetime 열의 시간 값이 12 시간 형식으로 변환됩니다.

내 시간 비교에 문제가 있습니다. 아래 코드의 대부분은 날짜/시간 값을 분리하여 비교할 수있는 항목을 얻으려고합니다. 여기서 루프, Mid(dr("apptdate"), 12, 5) 값이 01:00로 반환되는 경우

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 

. 데이터베이스의 실제 값은 13:00입니다.

누구나이 전환이 일어나는 이유를 제안 할 수 있습니까? 비교가 실패하게되어 TimeDot이 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() 
관련 문제