2015-07-27 12 views
13

pobierane bezpośrednio z bezpośrednim okna:Natychmiastowe okno - przesyłaj jak datetime? zgłasza wyjątek ale (datetime) nie

reader["DateDue"] as DateTime? Wydajność:

'reader["DateDue"] as DateTime?' threw an exception of type 'System.NullReferenceException' 
Data: {System.Collections.ListDictionaryInternal} 
HResult: -2147467261 
HelpLink: null 
InnerException: null 
Message: "Object reference not set to an instance of an object." 
Source: null 
StackTrace: null 
TargetSite: null 

(DateTime?)reader["DateDue"] Wynik:

{1/26/2015 12:00:00 AM} 
Date: {1/26/2015 12:00:00 AM} 
Day: 26 
DayOfWeek: Monday 
DayOfYear: 26 
Hour: 0 
Kind: Unspecified 
Millisecond: 0 
Minute: 0 
Month: 1 
Second: 0 
Ticks: 635578272000000000 
TimeOfDay: {System.TimeSpan} 
Year: 2015 

i odniesienia reader["DateDue"] Wynik:

{1/26/2015 12:00:00 AM} 
Date: {1/26/2015 12:00:00 AM} 
Day: 26 
DayOfWeek: Monday 
DayOfYear: 26 
Hour: 0 
Kind: Unspecified 
Millisecond: 0 
Minute: 0 
Month: 1 
Second: 0 
Ticks: 635578272000000000 
TimeOfDay: {00:00:00} 
Year: 2015 

Czy to błąd? Jeśli działa bezpośrednio odlewanie do DateTime?, to powinno działać również odlewanie z as DateTime?.

Znalazłem pracę nad tym za pomocą reader.GetDateTime(reader.GetOrdinal("DateDue")) as DateTime?. Nieważne, że nie radzi sobie dobrze z wartościami zerowymi. W każdym razie istnieje niezliczona ilość sposobów na ominięcie tej dziwności.

Repo wykazując problemu można znaleźć tutaj: https://github.com/jjoedouglas/exceptionAsDatetime

+0

pokaż kod mężczyzna, –

+0

To bardzo prosty 'IDataReader' w ciasnej pętli. Nie interesujący w najmniejszym, jeśli kiedykolwiek napisałeś kod, który używa 'SqlConnection' i' SqlCommand', widziałeś to milion razy. – MushinNoShin

+1

@MushinNoShin "To bardzo prosty IDataReader w ciasnej pętli". Z wyjątkiem twojej "bardzo prostej pętli" daje błąd, który nie ma sensu. Pokaż nam kod, nie mów tylko, że użycie słowa kluczowego 'as' powoduje zgłoszenie wyjątku o wartości zerowej. – Rob

Odpowiedz