2013-05-22 13 views
7

Próbuję wstawić wartość null (DateTime) w mojej bazie danych dla pola wpisanego "date", ale zawsze otrzymuję '0001-01-01'. Nie rozumiem, to pole "zezwala na zerowanie" i nie wiem, dlaczego mam tę domyślną wartość.Dlaczego po wstawieniu wartości null DateTime mam "0001-01-01" w SQL Server?

używam C# .NET z asp MVC (Entity Framework), to jest mój kod:

Budget_Synthesis newBS = new Budget_Synthesis 
{ 
    Budget_Code = newBudgetCode, 
    Last_Modified_Date = null 
}; 
db.Budget_Synthesis.AddObject(newBS); 

LAST_MODIFIED_DATE jest wpisany System.DateTime? więc nie wiem, dlaczego zmieniają ten "zerowy".

Gdy próbuję wyświetlić wartość na mojej aplikacji mam 01/01/0001 00:00:00

I 0001-01-01 z SSMS

Ktoś może mi wyjaśnić dlaczego nie mogę uzyskać prawdziwy „null”?

poważaniem

+4

Pokaż swój kod, proszę –

+0

wstawiasz wartość C# zerowej datetime do pola sqldatetime? –

+3

Jak próbujesz wstawić? To się liczy. Dużo. –

Odpowiedz

9

myślę, że to jest wartość odpowiadająca wartości null

+2

+1 To prawda! Użyj 'DBNull.Value', aby wstawić SQL' NULL' – Andomar

+4

@Andomar, który jest dobrze i dobrze, ale to nie jest to, co mówi ta odpowiedź: –

+0

@MarcGravell: Komentarz miał służyć jako dodatkowa informacja. Jeśli uruchomisz 'var d = new DateTime(); Console.WriteLine (d); ', drukuje' 0001-01-01', co powoduje, że nie zgadzam się z pochopnymi notatkami. – Andomar

2

Kiedy mówiąc staramy się umieścić null DateTime, jesteś za pomocą Nullable<DateTime> (a.k.a DateTime?) lub po prostu DateTime? Ten ostatni jest typ wartości, a jego wartość domyślna to właśnie 01/01/0001 00:00:00

+0

Na podstawie próbki kodu, która przypisuje 'null' do tego, co jest * prawdopodobnie * datą, wiemy, że nie może to być' DateTime'; tak więc 'DateTime?' jest najbardziej prawdopodobne –

+0

@NikolaDimitroff To jest 'System.DateTime?' generowane przez EntityFramework kiedy połączyłem moje Modele z DB, dlatego mogę dać mu 'zerowy', ale nie wiem, dlaczego on zmienia ją w tę domyślną wartość. – Alex

4

Jeśli Last_Modified_Date jest typu DateTime, nie można mieć „prawdziwy null” bo DateTime structure - jak inni już said- nie jest pustych. Twój przykładowy kod nawet się nie skompiluje.

Jeśli Last_Modified_Date jest typu DateTime? (Nullable<DateTime>) kod jest poprawny, ale -jako @Nikola Dimitroff powiedział w swoim answer- nie można mieć „prawdziwy null” w bazie danych, ponieważ wartość domyślna dla DateTime? jest 01/01/0001 00:00:00.

"Rzeczywisty brak", którego szukasz, to DBNull.Value, ale możesz go używać tylko dla typu System.DBNull; jeśli przypiszesz Last_Modified_Date = DBNull.Value, niezależnie od typu Last_Modified_Date, twój kod się nie skompiluje.

Powiązane problemy