Poniższy kod podaje błąd - „Brak niejawnej konwersji z DBnull na int.”
SqlParameter[] parameters = new SqlParameter[1];
SqlParameter planIndexParameter = new SqlParameter("@AgeIndex", SqlDbType.Int);
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : AgeItem.AgeIndex;
parameters[0] = planIndexParameter;
c#
dbnull
sqlparameter
Względność
źródło
źródło
==
na końcu 3 linii?)Odpowiedzi:
Problem polega na tym, że
?:
operator nie może określić typu zwracanego, ponieważint
zwracana jest wartość lub wartość typu DBNull, które nie są kompatybilne.Oczywiście można rzutować instancję AgeIndex na typ,
object
który spełnia?:
wymagania.Możesz użyć
??
operatora zerowania koalescencji w następujący sposóbOto cytat z dokumentacji MSDN dla
?:
operatora, który wyjaśnia problemźródło
AgeItem.AgeIndex as object
??
jest takie samo rozwiązanie jak gdybyś użyć regularną trójskładnikowej?:
- trzeba jeszcze obsadyAgeItem.AgeIndex
do obiektu:planIndexParameter.Value = AgeItem.AgeIndex.HasValue ? (object)AgeItem.AgeIndex : DBNull.Value;
.?:
do porównania specyficznego dla typu, rzutowanie całego wyrażenia nie zadziała. Musisz rzucać parametr nie DBNull tak:someID == 0 ? DBNull.Value : (object)someID