我的存储过程:
@UserName nvarchar(64),
AS
BEGIN
SELECT MPU.UserName, SUM(TS.Monday)as Monday //TS.Monday contains float value
FROM dbo.MapTask MT JOIN dbo.MapPU MPU
ON MPU.ID = MT.MPUID
JOIN dbo.TimeSheet TS
ON MT.TMSID = TS.ID
WHERE MT.StartDate = @StartDate_int and MPU.UserName = @UserName
GROUP BY MPU.UserName
END
在我的 C# 代码中
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
float monday = (float)reader["Monday"]; // Invalid cast exception
}
有人可以告诉我我做错了什么吗?谢谢。
我的猜测是该值作为盒装返回double
代替float
。当您拆箱时,类型必须是exactly正确的。所以假设我是对的但事实并非如此decimal
或类似的东西,你可以使用:
float monday = (float) (double) reader["Monday"];
它会起作用的。不过这实在是太丑了。如果你使用SqlDataReader.GetFloat http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getfloat.aspx应该是正确的if它确实是一个单精度值,并且更清楚(IMO)发生了什么。
另一方面,您的数据可以actually从数据库中返回double
,在这种情况下你应该(IMO)使用:
float monday = (float) reader.GetDouble(column);
顺便说一句,你确定float
首先实际上是最合适的类型吗?经常decimal
更合适...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)