Проблема вставки строки или NULL в базу данных SQL Server - PullRequest
0 голосов
/ 27 февраля 2009

Я только что прочитал верхний ответ на этот пост:
Ошибка вставки строки или 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 жалуется на следующее сообщение:
"Оператор" не может применяться к операндам типа 'string' и 'System.DBNull' "

Ответы [ 3 ]

4 голосов
/ 27 февраля 2009

Попробуйте:

cmd.Parameters.AddWithValue(param, (object)strings[param] ?? DBNull.Value);
0 голосов
/ 27 февраля 2009
    cmd.Parameters.AddWithValue(param, strings[param] == null ? DBNull.Value : strings[param]);

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

0 голосов
/ 27 февраля 2009

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

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

(left != null) ? left : right

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

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

...