【发布时间】: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);
}
【问题讨论】: