null в DBNull в AddWithValue с использованием объектной переменной в C #

Я пытаюсь преобразовать необязательный параметр метода C # в DBNull (если это null) для добавления с помощью метода Parameter.AddWithValue.

Я видел много решений (Установите значение базы данных равным null с помощью a SqlCommand + parameters), методы расширения и т. д., но мне нужно было однострочное решение.

command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)не работают (Оператор '??' не может применяться к операндам типа 'string' и 'System.DBNull')

Метод: public static void Foo(string bar, string municipio = null)

К сожалению, я не могу сделать string municipio = DBNull.Value, потому что «параметр по умолчанию должен быть константой времени компиляции» (смысл чего я не совсем понимаю).

Мне удалось заставить его работать так:

object obj = municipio == null ? command.Parameters.AddWithValue("@Municipio", DBNull.Value) : command.Parameters.AddWithValue("@Municipio", municipio);

Мне это очень неудобно, похоже, это способ делать с помощью JavaScript, я хочу что-то вроде:

if municipio == null ? command.Parameters.AddWithValue("@Municipio", DBNull.Value) : command.Parameters.AddWithValue("@Municipio", municipio);

Но почему-то я не могу заставить его работать так, возможно, мне не хватает синтаксиса (я пробовал много комбинаций скобок и т. Д.).

Итак, мой вопрос: это хорошая практика - однострочное решение, которого я достиг, или мне его заменить?


person Dillinger    schedule 04.01.2017    source источник
comment
Другой вариант - command.Parameters.AddWithValue("@Municipio", municipio ?? DBNull.Value)   -  person stuartd    schedule 04.01.2017
comment
Я пробовал, но Operator '??' cannot be applied to operands of type 'string' and 'System.DBNull'   -  person Dillinger    schedule 04.01.2017
comment
Прости. Должно быть command.Parameters.AddWithValue("@Municipio", municipio ?? (object)DBNull.Value)   -  person stuartd    schedule 04.01.2017
comment
Этот способ работает, но посмотрите здесь (stackoverflow.com/questions/41473095/), чтобы я мог лучше понять разницу между вашими одинаковыми ответами.   -  person Dillinger    schedule 04.01.2017


Ответы (1)


Обновлено для обработки, если переменная не инициализирована. Вот пример:

            OracleParameter P_COUNTYCODE = new OracleParameter("P_COUNTYCODE", OracleDbType.Varchar2);
            P_COUNTYCODE.Direction = ParameterDirection.Input;
            P_COUNTYCODE.Value = countyCode.Length > 0 ? countyCode : (object)DBNull.Value;

пытаться:

command.Parameters.AddWithValue("@Municipio", !string.IsNullOrEmpty(municipio) > 0 ? municipio : (object)DBNull.Value)
person gmdev86    schedule 04.01.2017
comment
Это не проверяет, является ли значение нулевым, что является тем, о чем конкретно задан вопрос (запрос длины нулевого значения вызовет исключение NullReferenceException) - person stuartd; 04.01.2017
comment
Этот способ работает, но я жду здесь ответа (stackoverflow.com/questions/41473095/), чтобы лучше понять наблюдение, которое сделал @stuartd. - person Dillinger; 04.01.2017
comment
спасибо, Стюарт! Я обновил свой ответ, чтобы обработать, если переменная не была установлена. - person gmdev86; 05.01.2017