Ustawienie parametru na DBNull.Value za pomocą składni trójskładnikowej daje błąd?
Mam następujący bit kodu, aby ustawić parametr, który będzie używany w instrukcji INSERT, aby ustawić kolumnę VARCHAR w bazie danych SQL Server. Mój obiekt wartości (o nazwie ilo) ma właściwość o nazwie Description, która zostaje zainicjowana na String.Empty, a następnie albo zostaje ustawiona na jakąś wartość odczytaną z XML, albo jeśli ten element XML jest pusty, pozostaje tylko String.Empty.
Więc podczas wstawiania do bazy danych, jeśli właściwość jest nadal ustawiona na String.Empty, chciałbym, aby wstawiła ona wartość null.
database.AddInParameter(cmd, "@description", DbType.String,
(ilo.Description.Equals(string.Empty)) ?
DBNull.Value :
ilo.Description);
Więc zasadniczo mówię, jeśli ilo.Description równa się string.empty, ustaw parametr na DBNull.Value, w przeciwnym razie ustaw go na ilo.Description.
Daje to następujący błąd w Visual Studio ...
Błąd 141 Nie można określić typu wyrażenia warunkowego, ponieważ nie ma niejawnej konwersji między „System.DBNull” i „string”
Czemu?
Ciekawostką jest to, że mogę wykonać następujące czynności bez żadnego błędu, który powinien być dokładnie tym samym, co użycie wbudowanej składni warunkowej jak powyżej!?!
if(ilo.Description.Equals(string.Empty))
{
database.AddInParameter(cmd, "@description", DbType.String, DBNull.Value);
}
else
{
database.AddInParameter(cmd, "@description", DbType.String, ilo.Description);
}
Przeszukałem inne posty i znalazłem poniżej, ale tak naprawdę nie odpowiada na moje pytanie.
Sposób EntLib na powiązanie wartości „Null” z parametrem
Bardziej interesuje mnie DLACZEGO, ponieważ oczywistym obejściem jest użycie instrukcji if / else zamiast składni wbudowanej (trójskładnikowej)?
Na tym łączu znajduje się coś w rodzaju odpowiedzi, ale chciałbym uzyskać lepsze wyjaśnienie, ponieważ wydaje mi się, że to BS nie działa; Nazwałbym to bugiem!