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