2010-11-02 4 views
6

Я хочу проверить значение System.DateTime, прежде чем добавлять его в качестве параметра в свой экземпляр SqlCommand.Проверка даты в пределах диапазона SqlDbType.DateTime

В документации MSDN для SqlDbType перечисления говорит:

Дата и время данных в диапазоне значений от 1 января 1753 года по 31 декабря 9999 г. с точностью 3,33 миллисекунды.

Для проверки значения, я использую

public readonly DateTime SqlDateTimeMin = new DateTime(1753, 1, 1); 
public readonly DateTime SqlDateTimeMax = new DateTime(9999, 12, 31); 

if (value < SqlDateTimeMin || value > SqlDateTimeMax) 
    // Validation check fails 
else 
    // Validation check succeeds 

Является ли это лучший способ? Есть ли альтернатива жесткому кодированию этих минимальных и максимальных значений?

ответ

19

Как насчет SqlDateTime.MinValue и SqlDateTime.MaxValue?

Примечание: это SQL типа мин/макс не типы .net, как предыдущие 2 ответов :-)

+1

+1 - похоже, что это точно, что ищет ОП. –

+0

Глаза идут плохо, это поздно днем. Виноват. – dotariel

+0

Чтобы развернуть это, если вам нужно проверить регулярную дату DateTime (что-то, на что я наткнулся), помните, что SqlDateTimes выставляют свойство Value, которое является DateTime. –

0
SqlDateTime.MaxValue = 12/31/9999 
SqlDateTime.MinValue = 1/1/1753 

Ваш код будет читаться:

if (value < SqlDateTime.MinValue || value > SqlDateTime.MaxValue) 

Я думаю, что это отвечает вашим потребностям лучше, чем DateTime.MaxValue и DateTime.MinValue, потому что DateTime.MinValue не 1/1/1753, а скорее 1/1/0001.

-4

Я думаю, что реальный вопрос, почему пользователи ввода дат за пределами этого диапазона? Ваш код для проверки его в порядке, однако я бы предположил, что это большая проблема в пользовательском интерфейсе, где люди могут вводить фиктивные даты.

+2

Для некоторых из нас легко сделать опечатку на свидании. Или неправильно понимать формат даты (мм/дд/гггг или дд/мм/гггг). – DOK

+0

Дайте им выбор даты и отключите текстовое поле. Вот как я качаю ... :-) – Achilles

+1

Недостаточно хорошего, чтобы полагаться только на проверку уровня UI, потому что этот «фильтр» (из-за отсутствия лучшего слова) можно обойти (довольно легко в веб-приложениях, как вопрос факт). Валидация (до минимума!) Должна быть на сервере, вне досягаемости рук пользователя. Проверка на уровне UI выполняется только для того, чтобы украсить пользовательский интерфейс и сохранить время и ресурсы обработки. И вот как вы должны ролл вместо этого. –

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