2015-03-11 2 views
0

Я хочу, чтобы мой код показывал, совпадает ли вход ввода i в моей базе данных. Но проблема в том, что этот код сравнивает каждую запись в моей базе данных. помогите мне, пожалуйста, извините за мой плохой английскийПроверка совпадений дат

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    connector() 
    Dim READER As MySqlDataReader 

    Try 
     MysqlConn.Open() 
     Dim query As String 
     Dim dbCheckIn, dbCheckOut As Date 

     '' query = "SELECT * FROM reservationtable WHERE CheckIn <= '" & dtpCO.Text & "' And CheckOut >= '" & dtpCI.Text & "'" 
     query = "SELECT CheckIn, CheckOut FROM reservationtable" 


     COMMAND = New MySqlCommand(query, MysqlConn) 
     READER = COMMAND.ExecuteReader 

     While READER.Read 
      dbCheckIn = READER("CheckIn") 
      dbCheckOut = READER("CheckOut") 
      Dim a As String 
      a = dbCheckIn <= dtpCO.Text And dbCheckOut >= dtpCI.Text 


      If a = True Then 

       MsgBox("Date Not Available!") 

      ElseIf a = Not True Then 

       MsgBox("Date Available!") 

      End If 
     End While 

     updateGrid() 
     MysqlConn.Close() 
    Catch ex As MySqlException 
     MessageBox.Show(ex.Message) 
    Finally 
     MysqlConn.Dispose() 
    End Try 

End Sub 

ответ

0

Try добавления ИНЕКЕ в вашем SQL заявление, чтобы ограничить результаты, которые имели бы считать перекрытие, так что если какие-либо записи возвращаются это перекрытие, и если ни один возвращаются, это не так. Например:

Dim textAsDate = New DateTime.Parse(dtpCO.Text) 

Dim query = "SELECT CheckIn FROM reservationtable 
    WHERE CheckIn <= " + txtAsDate + " AND CheckOut >= " + txtAsDate 

Dim command= New MySqlCommand(query, MysqlConn) 

Using dr As SqlDataReader = command.ExecuteReader() 

    Dim datatable= New DataTable() 
    datatable.Load(dr) 

    If datatable.Rows.Count > 0 Then 
     ' Not available 
    Else 
     ' Available 
    End If 

End Using 

Теперь вы должны иметь возможность просто проверить, если есть какая-либо значение, возвращенное и если да отправить «Дату не доступно» сообщения.

+0

Почему это иногда не работает? :(он всегда говорит, что дата доступна – yukikiki

+0

Привет. Я бы попробовал запустить инструкцию sql в студии управления SQL Server с датами, которые вы тестируете, и посмотреть, что произойдет. В приведенном выше запросе будут возвращаться только строки, где дата регистрации меньше или равна к дате, переданной в И дата проверки больше или равна дате, переданной в. Измените запрос, чтобы также вернуть поле CheckOut, а затем во время отладки проверить результаты и посмотреть, что значения checkIn и checkout, и если переданные дата относится к двум. Если вы можете, отправьте возвращаемые значения CheckIn и CheckOut, а также дату, прошедшую в. – DonnieDarko

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