Piszę procedurę C#, aby wywołać przechowywany proc. Na liście parametrów, które mijam, jest możliwe, że jedna z wartości może być prawnie zerowa. Więc pomyślałem, że mogę użyć linię:Czy jest możliwe, aby połączyć ciąg i DBNull w C#?
cmd.Parameters.Add(new SqlParameter("@theParam", theParam ?? DBNull.Value));
Niestety, ten zwraca następujący błąd:
CS0019: Operator '??' cannot be applied to operands of type 'string' and 'System.DBNull'
Teraz to wydaje się dość oczywiste, ale nie rozumiem Uzasadnieniem to. Dlaczego to nie zadziałało? (I często, gdy nie rozumiem, dlaczego coś nie działa, to nie jest tak, że nie może działać ... to, że robię to źle.)
Czy naprawdę muszę się rozciągać to na dłuższe stwierdzenie, jeśli-to?
EDIT:.. (Tak na marginesie, do tych, co sugeruje, wystarczy użyć „null”, jak jest, to nie działa pierwotnie zorientowali zerowy będzie automatycznie tłumaczone na DBNull też, ale to najwyraźniej nie (Kto wiedział?))
Aby uzyskać informacje, polecenia utworzone przez CommandBuilder mają zestaw parametrów zbudowanych dla ciebie. Jednak ten sam problem pojawia się w tym, że nie można po prostu oczekiwać przekazania wartości null do jednego z parametrów w wygenerowanym ParameterCollection. nadal musisz postępować zgodnie z powyższym opisem. – rohancragg
Ładne proste rozwiązanie :-) – IrishChieftain
Można również utworzyć metodę rozszerzenia, aby to zrobić. –