2010-11-02 6 views
6

Chcę sprawdzić poprawność wartości System.DateTime, zanim dodaję ją jako parametr do instancji SqlCommand.Sprawdzanie poprawności daty w zakresie SqlDbType.DateTime

dokumentacji MSDN dla wyliczenia SqlDbType mówi:

Data i czas dane począwszy wartości od 1 stycznia 1753 do 31 grudnia 9999 z dokładnością do 3,33 milisekundy.

Aby potwierdzić wartość używam

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 

Jest to najlepszy sposób? Czy istnieje alternatywa dla twardego kodowania tych wartości minimalnych i maksymalnych?

Odpowiedz

19

Co z SqlDateTime.MinValue i SqlDateTime.MaxValue?

Uwaga: są SQL typ min/max nie rodzaje .net jak poprzednich 2 odpowiedzi :-)

+1

+1 - wygląda na to, że * dokładnie * to, czego szuka OP. –

+0

Oczy padają późnym popołudniem. Mój błąd. – dotariel

+0

Aby się rozwinąć, jeśli chcesz sprawdzić zwykłą datę w czasie (coś, na czym się natknąłem), pamiętaj, że SqlDateTimes ujawnia właściwość Value, która jest DateTime. –

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

Twój kod będzie następnie odczytać:

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

myślę, że spełnia Twoje potrzeby lepiej niż DateTime.MaxValue i DateTime.MinValue, ponieważ DateTime.MinValue nie jest 01.01.1753, ale raczej jest 1/1/0001.

-4

Myślę, że prawdziwe pytanie brzmi dlaczego użytkownicy wpisywania dat spoza tego zakresu? Twój kod do sprawdzenia poprawności jest w porządku, ale sugeruję, że jest to większy problem w interfejsie użytkownika, w którym ludzie mogą wprowadzać fałszywe daty.

+2

Dla niektórych z nas łatwo jest zrobić literówkę na randce. Lub źle zrozumieć format daty (mm/dd/rrrr lub dd/mm/rrrr). – DOK

+0

Daj im próbnik dat i wyłącz pole tekstowe. Tak się rozwijam ... :-) – Achilles

+1

Nie wystarczy, aby polegać tylko na walidacji na poziomie UI, ponieważ ten "filtr" (z braku lepszego słowa) może zostać ominięty (dość łatwo w aplikacjach internetowych, jako kwestia fakt). Walidacja (do minimum!) Musi znajdować się na serwerze, poza zasięgiem rąk użytkownika. Sprawdzanie poprawności na poziomie interfejsu użytkownika odbywa się tylko w celu upiększenia doświadczenia użytkownika i zaoszczędzenia czasu/zasobów przetwarzania. I tak powinieneś w tym momencie rzucić. –