c# - 检查数据读取器中是否存在列

标签 c# idatareader

<分区>

有没有办法在不检查 IndexOutOfRangeException 的情况下查看字段是否存在于基于 IDataReader 的对象中?

本质上,我有一个方法采用基于 IDataReader 的对象并创建一个强类型记录列表。在 1 个实例中,一个数据阅读器具有其他人没有的字段。如果不需要的话,我真的不想重写提供给该方法的所有查询以包括该字段的某种形式。到目前为止,我能够弄清楚如何做到这一点的唯一方法是将 1 个唯一字段放入 try/catch block 中,如下所示。

try
{
    tmp.OptionalField = reader["optionalfield"].ToString();
}
catch (IndexOutOfRangeException ex)
{
    //do nothing
}

除了将“可选字段”添加到其他查询或复制加载方法之外,是否有更简洁的方法让一个版本使用可选字段而另一个版本不使用?

我也在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;
}

关于c# - 检查数据读取器中是否存在列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1206596/

相关文章:

c# - 异步方法可以等待多个响应吗?

c# - 点击事件查询

c# - 将 Kusto 客户端响应转换为对象列表会返回空对象

c# IDataReader SqlDataReader区别

c# - CreateDocumentQuery 与 LINQ 一起使用时会引发异常,与 SQL 一起使用时则正常

c# - WindowsFormsHost 上的工具栏覆盖

c# - 模板生成器中 sitecore 'source' 字段的查询符号

c# - DataReader::Dispose 应该调用 DataReader::Close 吗?

c# - 如何排除将特定数据库添加到我的阵列?

c# - IDataReader.GetName(i) 是否适用于空数据读取器?