为什么OleDb ExecuteScalar方法在查询COUNT时返回Decimal ?

本文关键字:返回 Decimal COUNT 查询 OleDb ExecuteScalar 方法 为什么 | 更新日期: 2023-09-27 18:18:01

我正在使用OleDb查询Oracle 10g数据库。

我的查询非常简单,只是从给定的表中获取记录的计数。

在使用ExecuteScalar时,我在试图将结果值转换为Int时遇到了转换错误。在检查类型时,结果是System.Decimal.

现在,我已经看到其他地方的用户有类似的id问题,但在这种情况下,我只是返回一个计数,预计是一个整数,所以为什么我仍然要强制转换它?

SQL语句如下。

 _sqlText = @" select count(*) as num_records from ce_quote_ext 
        where ce_quoteid in (select ce_quoteid from ce_quote where opportunityid in 
        (select opportunityid from ce_quote where ce_quoteid = '?' )) and custsign = 'T' ";

为什么OleDb ExecuteScalar方法在查询COUNT时返回Decimal ?

实际上是Oracle OleDb库返回一个小数。这是正确的行为。请参阅这里的Oracle文档。在Oracle文档中的示例中,他们将COUNT()函数的返回值转换为小数。所以,这是设计出来的。

// C#
...
CmdObj.CommandText = "select count(*) from emp";
decimal count = (decimal) CmdObj.ExecuteScalar();
...