Проблема со вставкой строки или NULL в базу данных SQL Server.

StackOverflow https://stackoverflow.com/questions/594176

  •  09-09-2019
  •  | 
  •  

Вопрос

Я только что прочитал верхний ответ в этом посте:
Проблема со вставкой строки или NULL в базу данных SQL Server.

Поправьте меня, если я ошибаюсь, но можно ли использовать оператор ?? только для двух переменных одного и того же типа? Если нет, я был бы очень признателен, если бы кто-нибудь мог решить мою небольшую проблему.

Я попытался вставить в свой проект код, аналогичный приведенному ниже.

Dictionary<string, string> strings = new Dictionary<string, string>()
{
    {"@param0", strParam0},
    {"@param1", strParam1},
    {"@param2", strParam2}
};
foreach (string param in strings.Keys)
{
    cmd.Parameters.AddWithValue(param, strings[param] ?? DBNull.Value);
}

Но Visual Studio жалуется на следующее сообщение:
"Оператор" ?? '' не может быть применен к операндам типа «строка» и «system.dbnull» "

Это было полезно?

Решение

DBNull и Null не относятся к одному и тому же типу, а также типы, допускающие значение NULL, или ссылочные типы и DBNull.Вы можете использовать только ??со значениями одного типа.

Можно подумать о ??оператор как синтаксический сахар для:

(left != null) ? left : right

А тернарная операция требует, чтобы и левая, и правая стороны были одного и того же типа, поэтому левая и правая часть ??оператор также должен быть того же типа.

Так что, к сожалению, нет..вы не можете сделать это таким образом, по крайней мере, без какого-то уродливого кастинга.

Другие советы

Пытаться:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
    cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);

Единственным недостатком является то, что он будет искать словарь дважды!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top