Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 布尔强制转换指定的强制转换无效错误-将值从case语句传递给reader.GetBooleanVal_C#_Sql - Fatal编程技术网

C# 布尔强制转换指定的强制转换无效错误-将值从case语句传递给reader.GetBooleanVal

C# 布尔强制转换指定的强制转换无效错误-将值从case语句传递给reader.GetBooleanVal,c#,sql,C#,Sql,在执行reader.GetBooleanVal的循环时,当我点击item.FinancialHold时,我收到的错误无效。但我的select声明似乎一切都是正确的。我不知道为什么会出现这个异常 我的目标是根据我返回的某个值,我正在更改另一列的结果,我使用案例陈述的原因。。。任何帮助都将不胜感激 List<CollectionCodeParameter> list = new List<CollectionCodeParameter>(); var sql

在执行reader.GetBooleanVal的循环时,当我点击item.FinancialHold时,我收到的错误无效。但我的select声明似乎一切都是正确的。我不知道为什么会出现这个异常

我的目标是根据我返回的某个值,我正在更改另一列的结果,我使用案例陈述的原因。。。任何帮助都将不胜感激

 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);
    }

它将帮助您调试如何解析缩短的if语句,以便可以逐行调试它

我现在无法尝试SQL,因此我必须猜测: 在SQL中,case语句不是返回位,而是返回int

编辑:

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

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

试试这个:

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

它将帮助您调试如何解析缩短的if语句,以便可以逐行调试它

我现在无法尝试SQL,因此我必须猜测: 在SQL中,case语句不是返回位,而是返回int

编辑:

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

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

试试这个:

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