Проблема со вставкой строки или NULL в базу данных SQL Server.
Вопрос
Я только что прочитал верхний ответ в этом посте:
Проблема со вставкой строки или 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]);
Единственным недостатком является то, что он будет искать словарь дважды!