返回ExecuteScalar的值强制类型转换,出现"指定数据转换无效"

1. 如果想统计某列总和,则使用 SELECT SUM(列名) 。注意,如果列中包含小数字,比如 1.25 ,则要使用double型而不能使用int型。代码演示:
double d = (double)Socut.Data.ExecuteScalar("SELECT SUM(s_id) FROM socut_data");
2. 如果想统计某列数据的平均值,则要使用 SELECT AVG(列名)。
3. 如果获取某列中的最大值,则使用SELECT MAX(列名)。反之,最小值为SELECT MIN(列名)


如果我用double d = (double)Data.ExecuteScalar("SELECT SUM(s_id) FROM socut_data");程序执行正常。
如果我用double d = (double)Data.ExecuteScalar("SELECT SUM(s_id) FROM socut_data",1);程序执行错误(指定数据转换无效)。

第一个是调用ACCESS数据库,第二个是调用SQL,这是为什么同一条命令会出错呢?

经过多次测试,结果让人痛苦:
int i = (int)Data.ExecuteScalar("SELECT COUNT(s_id) FROM socut_data");程序执行OK;
int i = (int)Data.ExecuteScalar("SELECT SUM(s_id) FROM socut_data");程序执行错误(指定数据转换无效)。 
后来经测试:
double d = (double)Data.ExecuteScalar("SELECT SUM(s_id) FROM socut_data");
改成:double d = Convert.ToDouble(Data.ExecuteScalar("SELECT SUM(s_id) FROM socut_data"));
我们可以强制进行转换,程序不会出错,且达到转换之结果。不会出现任何转换问题。

以下是该Data.ExecuteScalar方法
public object Data.ExecuteScalar(...)
{
   ........
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值