This question already has answers here:
Check for column name in a SqlDataReader object

(25个答案)


6年前关闭。




有没有一种方法可以查看基于IDataReader的对象中是否存在一个字段,而无需检查IndexOutOfRangeException?

本质上,我有一个方法,该方法采用基于IDataReader的对象并创建记录的强类型列表。在一种情况下,一个数据读取器具有一个其他字段没有的字段。我真的不需要重写所有提供此方法的查询,以在不需要时包括此字段的某种形式。到目前为止,我唯一能弄清楚该怎么做的方法是将1个唯一的字段放入try/catch块中,如下所示。
try
{
    tmp.OptionalField = reader["optionalfield"].ToString();
}
catch (IndexOutOfRangeException ex)
{
    //do nothing
}

有没有一种更干净的方法,可以不向其他查询添加“可选字段”或复制加载方法,以便1个版本使用可选字段,而其他版本则不使用?

我也在2.0框架中。

最佳答案

我最终使用reader.GetName(int)方法找到了解决方案。我创建了以下方法来包含逻辑。

public bool ColumnExists(IDataReader reader, string columnName)
{
    for (int i = 0; i < reader.FieldCount; i++)
    {
         if (reader.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase))
        {
            return true;
        }
    }

    return false;
}

09-07 03:09