我如何得到一个列的序数在一个数据阅读器



我怎样才能发现如果列存在于DataReader的结果集中?

我试一试:

int columnOrdinal = reader.GetOrdinal("LastName");
columnExists = (columnOrdinal < 0);

但是GetOrdinal如果列不存在则抛出异常。我的情况并不例外。事实恰恰相反。这是……ceptional。


注意:与我的问题无关,但是,真正的原因我想知道一列是否存在是因为我想获得一列的序数位置,如果列不存在则不会抛出异常:

int columnOrdinal = reader.GetOrdinal("Lastname");

注意:与我的问题无关,但是,真实原因我想知道是否存在一列,因为我想知道该列是否包含null:

itIsNull = reader.IsDBNull(reader.GetOrdinal("Lastname"));

不幸的是,IsDBNull只接受一个序数,而GetOrdinal抛出一个异常。所以我只剩下:

if (ColumnExists(reader, "Lastname"))
{
   itIsNull = reader.IsDBNull(reader.GetOrdinal("Lastname"));
}
else
   itIsNull = false;

注意:与我的问题无关,但是,我想知道列是否存在的真正原因是因为有时列不会出现在结果集中,并且我不想抛出异常处理数据库结果,因为它不是异常。

您所能做的是有限的,因为IDataReader并没有公开多少有用的东西。使用类似问题

的答案所示的循环

检查SqlDataReader对象中的列名

对于处理的第一行,您可以构建一个简单的字典,该字典以列名为键,以序数作为值(或者如果不关心序数值,则使用HashSet)。然后,您可以使用columnDictionary.ContainsKey("LastName")作为测试。您只需为遇到的第一行构建一次字典,然后所有随后的行都将很快。

但说实话,与数据库时间相比,在其他stackoverflow问题中使用as-is解决方案所消耗的时间可能可以忽略不计。

编辑:这里有更多的可能性:检查一个列是否存在于数据阅读器

相关内容

  • 没有找到相关文章

最新更新