gpt4 book ai didi

ado.net - 如何获取 DataReader 中列的序号

转载 作者:行者123 更新时间:2023-12-02 17:46:18 24 4
gpt4 key购买 nike

如何查明 DataReader 的结果集中是否存在某列?

我尝试:

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

但是如果列不存在,GetOrdinal 会引发异常。我的情况也不异常(exception)。事实恰恰相反。这……很神奇。

<小时/>

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

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 没有公开太多有用的信息,因此您可以做的事情是有限的。使用类似问题的答案中所示的循环

Check for column name in a SqlDataReader object

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

但说实话,与数据库时间相比,使用其他 stackoverflow 查询中的原样解决方案所消耗的时间可能可以忽略不计。

编辑:此处的其他可能性:Checking to see if a column exists in a data reader

关于ado.net - 如何获取 DataReader 中列的序号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8233823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com