我不直接熟悉任何带有SingleDecimal
方法的工具,所以我将在一般意义上回答:
从 ADO.NET(直接或间接)查询数据时,很可能(可能两者都)您将获得某种“阅读器”API(最有可能IDataReader
),或者您将获得原始object
值。
在第一种情况下,您应该可以访问一个IsDBNull
方法(每列);所以调用那个方法,然后对空值做任何你想做的事情。
在第二种情况下,您应该检查 的值DBNull
,即if(val is DBNull
)。
在这两种情况下,代码下一步做什么取决于库。在这两种情况下,您可能需要在这里考虑两个空场景:没有行,以及具有单个值的行。
坦率地说,在这两种情况下,使用现有支持的库/工具会更容易。例如,使用 dapper,这将是:
string customerId = "01";
decimal? pembayaran = Db.Query<decimal?>(
"Select valuta from ArInvoice where customerID=@customerId",
new { customerId }).Single();
这给了你:
- 正确的参数化
- 空值处理
- 查询所有数据的同一个 API (
Query<T>
)
- 能够使用您喜欢的任何 LINQ 进行序数(
Single()
、、、First()
等ToList()
)
如果您想使用默认值(而不是decimal?
当单元格的值为 时为空null
,您可以使用:
decimal pembayaran = Db.Query<decimal?>(
"Select valuta from ArInvoice where customerID=@customerId",
new { customerId }).Single() ?? 0M;
这里请注意,这?? 0M
只是一个空合并操作,用于获得一个零decimal
来代替null
.