Xit*_*rum 15 c# sql t-sql sql-server stored-procedures
我的存储过程:
@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
Run Code Online (Sandbox Code Playgroud)
在我的C#代码中
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
float monday = (float)reader["Monday"]; // Invalid cast exception
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?谢谢.
Jon*_*eet 31
我的猜测是,该值将作为盒装double而非返回float.当您取消装箱时,类型必须完全正确.因此,假设我是对的,它不是decimal或类似的东西,你可以使用:
float monday = (float) (double) reader["Monday"];
Run Code Online (Sandbox Code Playgroud)
它会起作用.那很难看.如果你使用SqlDataReader.GetFloat它应该是正确的,如果它真的是一个单精度值,并且它更清楚(IMO)正在发生什么.
另一方面,您的数据实际上可以从数据库返回double,在这种情况下您应该(IMO)使用:
float monday = (float) reader.GetDouble(column);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你确定这float首先是最合适的类型吗?通常decimal更合适......