Zauważyłem dziwny problem w kawałku kodu, w którym zapytanie SQL adhoc nie generowało oczekiwanego wyniku, mimo że jego parametry pasowały do rekordów w źródle danych. Postanowiłem wprowadzić następujące wyrażenie testowy do natychmiastowego oknem:Dlaczego konstruktor nazwa/wartość SqlParameter traktuje 0 jako wartość null?
new SqlParameter("Test", 0).Value
To dało wyniku null
, która pozostawia mnie drapania moją głowę. Wygląda na to, że konstruktor SqlParameter
traktuje zera jako wartości null. Poniższy kod daje prawidłowy wynik:
SqlParameter testParam = new SqlParameter();
testParam.ParameterName = "Test";
testParam.Value = 0;
// subsequent inspection shows that the Value property is still 0
Czy ktoś może wyjaśnić to zachowanie? Czy jest to w jakiś sposób zamierzone? Jeśli tak, to raczej potencjalnie niebezpieczne ...
Więcej informacji na ten temat: http://stackoverflow.com/questions/14224465/compiler-value-type-resolution-and-hardcoded-0-integer-values – RLH