У вас есть две проблемы;каждый понимает, как SQL Server работает с датами.В приведенном выше примере ваш запрос на самом деле:
SELECT * from Contractor_Appointments where app_date Between '02/04/2012 00:00:00' and '02/04/2012 00:00:00'
Вы запрашиваете все встречи с полуночи до полуночи, что не так уж и плохо, за исключением вашей второй проблемы.Вы используете неоднозначный формат даты и времени.То, как SQL Server интерпретирует эту дату, будет зависеть от множества параметров - ваших региональных настроек и языка, который использует база данных, например.В вашем случае это фактически интерпретирует его как 4 февраля 2012 г., что говорит о том, что вы выполняете запрос на компьютере в США, или же язык вашей базы данных предназначен для региона, где формат даты - ММ / дд / гггг
Использованиевместо этого используется инвариантный формат даты и времени - это однозначно и не должно зависеть от региональных настроек.Примером инвариантного формата даты и времени является ггггМмдд ЧЧ: мм: сс
Таким образом, ваш запрос будет:
SELECT * from Contractor_Appointments where app_date Between '20120402 00:00:00' and '20120403 00:00:00'
, который даст вам все встречи 2 апреля 2012 года (т.е. всемежду полночью 2 апреля и полуночью 3 апреля).
Вы могли бы так же легко написать свой запрос таким образом, учитывая, что ваши даты и время кажутся полуночными:
SELECT * FROM Contractor_Appointments WHERE app_date = '20120402 00:00:00'
См. этот ответ для получения дополнительной информации о том, как лучше форматировать даты при запросах в SQL Server.
РЕДАКТИРОВАТЬ
Для вашей вставки применяется то же самое.Вы должны использовать однозначный формат даты и времени.См. Этот вопрос для получения дополнительной информации , но эффективно:
INSERT INTO yourtable (date_column) VALUES ('20120402')
даст вам то, что вы хотите.
Если у вас есть объект DateTime, то вызов DateTime.ToString("yyyyMMdd HH:mm:ss")
даст вам правильно отформатированную строку.