当前位置: 首页 > 面试题库 >

从SQLDataReader读取结果时,无效的强制转换异常

戚晨
2023-03-14
问题内容

我的存储过程:

    @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。取消装箱时,类型必须 完全
正确。因此,假设我是对的,但事实并非decimal如此,您可以使用:

float monday = (float) (double) reader["Monday"];

它会工作。不过,这很丑陋。如果真正使用单精度值,
使用SqlDataReader.GetFloat它应该正确,而且(IMO)情况更清楚。
__

另一方面,您的数据 实际上 可能以的形式从数据库中返回double,在这种情况下,您应该(IMO)使用:

float monday = (float) reader.GetDouble(column);

顺便说一句,您确定float首先实际上是最合适的类型吗?通常decimal更合适…



 类似资料:
  • 我必须和整个AAB,付款条件,货币,检查法规和姓名的号码。 我想通过迭代结果列表来实现这一点: 我的问题是如何强制转换res对象才能获得具体的列值?我读过关于在hibernate查询中创建映射的文章,但我不知道通过添加

  • 问题内容: 我写了一个简单的Bag类。袋子中装有固定比例的温度枚举。它使您可以随机抓取一个,并在装满后自动自动装满。看起来像这样: 温度枚举看起来像这样: 我有一个常量实例属性。(我也尝试过使用变量。)当我需要一个新的温度时,调用一次,在合适的时候调用。 此呼叫随机地在中的行崩溃。错误是。检查调试器是否显示项目is 和。 编辑 好像我不了解调试器信息。即使有效的数组也会显示和无关的值。所以没有帮助

  • 本文向大家介绍SqlDataReader指定转换无效的解决方法,包括了SqlDataReader指定转换无效的解决方法的使用技巧和注意事项,需要的朋友参考一下 SqlDataReader指定转换无效的解决方法,具体内容如下 SqlDataReader 自带的GetInt32(以及其他的比如GerString等)方法 只是获取数据库中对应数据类型的列,并不具有类型转化的功能,所以不能这样使用 解决方

  • 问题内容: 我是Java的新手,正在尝试理解为什么第一个代码片段不会导致此异常,而第二个代码片段会导致此异常。由于在两种情况下都将字符串数组传递到Arrays.asList中,所以两个代码片段都不应该产生异常还是不产生异常? 第一个代码段(毫无例外): 第二段(导致上述异常): 如果相关,我正在Eclipse Helios中使用JavaSE 1.6。 问题答案: 对我来说(使用Java 1.6.0

  • 我是Java Web服务的新手,在过去的4天里我一直在坚持这一点。问题是,我打算创建供其他应用程序使用的web服务。要求web服务必须从一个表返回多条记录,因此我创建了一个示例web服务,下面是代码 界面 具有两个字符串对象的自定义类 这里是实现 使用JBossDeveloperStudio生成的WSDL是 当给出SOAP请求时,我得到强制转换异常[Lcom.org.ccb.test.Sample

  • Deal和DealDocument类是相同的。Deal document类如下所示: 你觉得问题可能是什么?它似乎是随机出现的,好像它工作正常,但在时间内系统退化 *更新*:这是我如何配置模型映射器的:ModelMapper.GetConfiguration().SetAmbiguity忽略(false).SetFieldMatchingEnabled(true).SetMatchingStrat