My stored procedure:
    @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
In my C# code
SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            float monday = (float)reader["Monday"]; // Invalid cast exception
        }
Can somebody tell me what I did wrong ? Thank you.
My guess is that the value is being returned as a boxed double instead of float. When you unbox the type has to be exactly right. So assuming I'm right and it's not decimal or something like that, you could use:
float monday = (float) (double) reader["Monday"];
and it would work. That's pretty ugly though. If you use SqlDataReader.GetFloat it should get it right if it's genuinely a single-precision value, and it's clearer (IMO) what's going on.
On the other hand, your data could actually be coming back from the database as a double, in which case you should (IMO) use:
float monday = (float) reader.GetDouble(column);
As an aside, are you sure that float is actually the most appropriate type here in the first place? Often decimal is more appropriate...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With