This question already has answers here:
Check for column name in a SqlDataReader object
(25个答案)
6年前关闭。
有没有一种方法可以查看基于IDataReader的对象中是否存在一个字段,而无需检查IndexOutOfRangeException?
本质上,我有一个方法,该方法采用基于IDataReader的对象并创建记录的强类型列表。在一种情况下,一个数据读取器具有一个其他字段没有的字段。我真的不需要重写所有提供此方法的查询,以在不需要时包括此字段的某种形式。到目前为止,我唯一能弄清楚该怎么做的方法是将1个唯一的字段放入try/catch块中,如下所示。
有没有一种更干净的方法,可以不向其他查询添加“可选字段”或复制加载方法,以便1个版本使用可选字段,而其他版本则不使用?
我也在2.0框架中。
(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