【问题标题】:Boolean cast Specified cast is not valid error - Passing value from a case statement to a reader.GetBooleanValBoolean cast Specified cast is not valid error - Passing value from a case statement to a reader.GetBooleanVal
【发布时间】:2020-06-05 06:54:34
【问题描述】:

当我在循环reader.GetBooleanVal 时点击item.FinancialHold 时遇到的错误是“指定的演员表无效”。但在我的选择声明中,一切似乎都是正确的。不知道为什么我会收到此异常。

我的目标是取决于我返回的某个值我正在更改另一列的结果,我使用 case 语句的原因...任何帮助将不胜感激。

 List<CollectionCodeParameter> list = new List<CollectionCodeParameter>();
        var sql = @"IF EXISTS (SELECT 1 FROM dbo.[collcode_Agency_Codes])
            BEGIN
                select
                  [collcode],
                   case when([collcode] = 'PIE')  then 1
                else 0
               end as [fin_hold],
                 FROM[dbo].[collcode_Agency_Codes]
            WITH(NOLOCK)
      WHERE type = @AgencyType
            END";
          ....code....

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            var ordinals = reader.GetOrdinals();
            while (reader.Read())
            {
                CollectionCodeParameter item = new CollectionCodeParameter();

                item.FinancialHold = reader.GetBooleanVal(ordinals.GetOrdinal("fin_hold")).HasValue ? 
                reader.GetBooleanVal(ordinals.GetOrdinal("fin_hold")).Value : false; ;


                list.Add(item);
            }

错误来自下方。我的 fin_hold 有点在我的表定义中。

public static bool? GetBooleanVal(this SqlDataReader reader, int ordinal)
    {
        if (ordinal < 0) return null;
        return reader.IsDBNull(ordinal) ? null : (bool?)reader.GetBoolean(ordinal);
    }

【问题讨论】:

    标签: c# sql


    【解决方案1】:

    它将帮助您调试以解决您缩短的 if 语句,因此您可以逐行调试它。

    我现在不能尝试 SQL,所以我不得不猜测:
    在您的 SQL 中,您的案例语句不返回 bit ,而是返回 int。

    case when([collcode] = 'PIE')
        then 1
        else 0
    end as [fin_hold],
    

    编辑:

    我的 fin_hold 有点在我的表定义中。

    您返回的不是您的专栏,而是您的案例陈述中的一个数字。别名 as [fin_hold] 与您的表定义无关。

    试试这个:

    case when([collcode] = 'PIE')
        then Cast(1 as bit)
        else Cast(0 as bit)
    end as [fin_hold],
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多