Я создаю объект Command с параметрами для установки значений столбца. Я хотел бы использовать простое условие для установки некоторого nullable int
столбца nullable int
либо целочисленному значению, либо DbNull.Value
, в зависимости от того, является ли переменная нулевой или нет.
Пример:
dbCmd.Parameters.Add("@MyIntColumn", SqlDbType.Int).Value =
myColumnValue == null ? DBNull.Value : myColumnValue;
Конечно, это дает ошибку компилятора: "нет неявного преобразования между DbNull и int".
Итак, каков правильный способ использования условного кода, результатом которого может быть либо int, либо DbNull?
Проблема заключается в том, что компилятор не может определить, какой тип результата будет иметь выражение - будь то DBNull
или int
, поскольку они являются несовместимыми типами.
Явно накладываю по крайней мере одну сторону object
на object
(самый высокий общий знаменатель), и он поймет:
dbCmd.Parameters.Add("@MyIntColumn", SqlDbType.Int).Value =
myColumnValue == null ? (object)DBNull.Value : myColumnValue;