转换ExecuteScalar()结果c#
本文关键字:结果 ExecuteScalar 转换 | 更新日期: 2023-09-27 18:04:00
为什么可以呢
int collectionCharge = (int)cmdCheck.ExecuteScalar();
但是这会产生一个异常
double collectionCharge = (double)cmdCheck.ExecuteScalar();
系统。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;
}
这里的问题是ExecuteScalar
正在返回一个int
,它被装箱成object
。为了转换为double
,你必须先打开int
,然后再转换为double
double collectionCharge = (double)(int)cmdCheck.ExecuteScalar();
使用转换。
。E
collectionCharge=Convert.ToDouble(cmdCheck.ExecuteScalar());
看起来ExecuteScalar返回一个Object,所以代码:
double collectionCharge = (double)cmdCheck.ExecuteScalar();
仍可能失败
感谢@DJKRAZE。
我将我的查询更新为SELECT CASE(FREIGHT_PRICE AS FLOAT)
,现在可以使用(双)强制转换。
double collectionCharge = (double)cmdCheck.ExecuteScalar();
在阅读了所有答案后,我确实收到了十进制值的情况,解决方案很容易!我只是将函数声明为字符串,并接收到十进制值作为字符串!
public static string Sals_AccountExpensesGetSums(int accountID)
{
SqlParameterHelper sph = new
SqlParameterHelper(ConnectionString.GetWriteConnectionString(),
"sals_AccountExpenses_GetAllSums", 1);
sph.DefineSqlParameter("@AccountID", SqlDbType.Int, ParameterDirection.Input, accountID);
string res = sph.ExecuteScalar().ToString();
return res;
}
,在业务层,我将结果更改为double!
public static decimal GetAccountExpensesSums(int accountId)
{
string res = "";
decimal sums = 0;
res = DBAccount.Sals_AccountExpensesGetSums(accountId);
// check so we will not have exception
if ( res != "")
sums = Convert.ToDecimal(res);
return sums;
}
,结果是完美的需要:889678.70
我建议使用下面的代码:
object o = c.ExecuteScalar();
if (o != null)
{
int x = Int32.Parse(o.ToString());
}
做两件事。首先,它确保你的c.ExecuteScalar()没有返回null如果它这样做,你试图转换,你会有问题。
第二,它使强制类型转换更简单,因为它可以应用于从查询读取时的几乎所有情况。
对象变成字符串。如果你想要一个字符串,你就完成了。如果你想要一个布尔值,检查这个字符串是否。equals ("true")如果你想把它作为整型,Int32.Parse(string);
如果你想让它长,Int64.Parse(string);
基本上,您不必担心完全理解重载/显式转换。