Я не являюсь непосредственно знаком с любым инструментом с методом SingleDecimal
, так что я В ответ на общий смысл:
При запросе данных из ADO.NET (прямо или косвенно), вполне вероятно, что (возможно, оба) вы получите какой-то «читающий» API (скорее всего, IDataReader
), или что вы получите необработанные значения object
.
В первом случае у вас должен быть доступ к методу IsDBNull
(за столбец); поэтому вызовите этот метод и сделайте все, что хотите, с помощью NULL.
Во втором случае вы должны проверить значение для DBNull
, то есть if(val is DBNull
).
В обоих случаях то, что делает код, соответствует библиотеке. В обоих случаях вам, возможно, стоит подумать о два сценарии нуль-esque здесь: нет строк и строки с одним значением.
Откровенно говоря, в обоих случаях было бы проще использовать библиотеку/инструмент, который имеет существующую поддержку для этого. Например, с Dapper, это было бы просто:
string customerId = "01";
decimal? pembayaran = Db.Query<decimal?>(
"Select valuta from ArInvoice where [email protected]",
new { customerId }).Single();
, который дает вам:
- правильной параметризацию
- обработка
- тому же API для запроса всех данных нуля (
Query<T>
)
- Возможность использования любых LINQ, которые вам нравятся для обычной (
Single()
, First()
, ToList()
и т. Д.)
Если вы хотите использовать значение по умолчанию (а не пустой decimal?
, когда значение ячейки было null
, вы могли бы просто использовать:
decimal pembayaran = Db.Query<decimal?>(
"Select valuta from ArInvoice where [email protected]",
new { customerId }).Single() ?? 0M;
здесь обратите внимание на ?? 0M
только нуль-сливающихся операция получить ноль decimal
вместо null
.
Какой инструмент/библиотека это метод «SingleDecimal»? Это твоя собственная? или...? 'Потому что изменение должно быть сделано там. –