【发布时间】:2013-03-15 15:04:46
【问题描述】:
为什么会这样
int collectionCharge = (int)cmdCheck.ExecuteScalar();
但这会产生异常
double collectionCharge = (double)cmdCheck.ExecuteScalar();
System.InvalidCastException:指定的强制转换无效。
为什么无效?
编辑
我试图简单地从查询中返回一个结果,该结果得到一些运费的价格。所以我不能把它变成int,因为它必须有小数,因此试图转换为double。我还在学习asp.net,所以如果有更好的方法来实现这一点,请指出正确的方向:)
编辑 2 完整的 SQL 代码...
using (SqlCommand cmdCheck = new SqlCommand("SELECT FREIGHT_PRICE FROM FREIGHT_QUOTER_BELNL_NEW WHERE CUSTOMER_NO = @CUSTOMER_NO AND COUNTRY = @COUNTRY AND ROUND(WEIGHT_FROM,0) < @WEIGHT AND ROUND(WEIGHT_TO,0) >= @WEIGHT AND SHIPVIA = '48';", connection))
{
double collectionCharge = (double)cmdCheck.ExecuteScalar();
FreightAmount = collectionCharge;
}
【问题讨论】:
-
因为它返回一个 int,而不是返回一个 double?
-
我不知道,但双重演员可能会让你通过这个:
(double)(int)cmdCheck.ExecuteScalar()。 -
@DJKRAZE,它也不会直接返回
int。您的评论和投票表明您不理解他的问题。 -
@Stuart 转换是一个表达式。这就像说你知道你可以做 1+1,但不知道 (1+1)+1 也有效。
-
@DJKRAZE,很明显你有误解。 ExecuteScalar 将返回一个对象,该对象包含结果第一行第一列的值。除非您想在代码中处理对象,否则您会将结果转换为更适用的类型。将其转换为您希望使用的类型是完全有意义的。他的问题是为什么直接演员不加倍工作。 ExecuteScalar 在这里只涉及到切线。
标签: c# asp.net casting executescalar