ti scrivo non tanto il codice, piuttosto la logica che ci metterei io

codice:
Function VerificaDisponibilita (ByVal Data As DateTime, ByVal IDPersona As Integer) As Boolean
'Esegui query:
SELECT * FROM [tabella] WHERE Data > [DataInizio] AND Data < [DataFine] AND [IDPersona] = IDPersona
'questo vuol dire che Data è compreso tra un [DataInizio] e un [DataFine], per cui la tal persona è occupata
'metti tutto in un DataTable
If DataTable.Rows.Count > 1
'porca trota: c'è qualcosa che non va. la tal persona è sì occupata, ma deve essere presente in due posti contemporaneamente.
Return False
ElseIf DataTable.Rows.Count = 1
'perfetto: è occupato in un unico lavoro.
Return False
ElseIf DataTable.Rows.Count = 0
'che equivale ad Else
'non è occupato, può ancora sgobbare per quella determinata data.
Return True
End If
End Function