I'm posting this mostly because I know I'll forget, but hopefully it'll come in handy for others as well. One tricky problem in programming is to search by date range against data that also has a date range. Sounds simple, but this can quickly get confusing. You must take into account the start and end date of the search criteria, as well as the start and end date of the data. You must also consider cases where the start date is in the given range, but the end date is not, or visa-versa. Then there are cases where neither are in the search range. See, confusing. (Ryan Farley has a good illustration of it all, and is where I finally found my answer)
It helped me to think of it in terms of a timeline, and the search as simply finding the records where the search range intersects with the record range. As one of the commenters on the above post pointed out, it's easier to exclude the records that don't match. In a SQL, it'd look something like this:
SELECT * FROM Reservations WHERE (NOT((ReservationEnd < @StartDate) or (ReservationStart > @EndDate)))
In plain english: Get the records where the reservation does not end before the start date, or start after the end date.
One other gotcha. Be sure, when passing the start and end dates into your SQL query from .NET, that you're considering time as well. Typically, you'll want to search from 12AM to 11:59PM:
Dim startDate As DateTime = New DateTime(CurrentDate.Year, CurrentDate.Month, 1, 0, 0, 0)
Dim endDate As DateTime = New DateTime(CurrentDate.Year, CurrentDate.Month, DateTime.DaysInMonth(startDate.Year, startDate.Month), 23, 59, 59)