gpt4 book ai didi

c# - IDataReader 和 "HasColumn",最佳方法?

转载 作者:太空狗 更新时间:2023-10-29 21:37:19 25 4
gpt4 key购买 nike

我见过两种检查 IDataReader 中是否存在列的常用方法:

public bool HasColumn(IDataReader reader, string columnName)
{
try
{
reader.getOrdinal(columnName)
return true;
}
catch
{
return false;
}
}

或者:

public bool HasColumn(IDataReader reader, string columnName)
{

reader.GetSchemaTable()
.DefaultView.RowFilter = "ColumnName='" + columnName + "'";

return (reader.GetSchemaTable().DefaultView.Count > 0);
}

就我个人而言,我使用了第二种,因为我讨厌因此而使用异常。

但是,在大型数据集上,我认为 RowFilter 可能必须对每列进行一次表扫描,这可能非常慢。

想法?

最佳答案

我想我对这个古老的 gem 有一个合理的答案。

我会选择第一种方法,因为它更简单。如果您想避免异常,您可以缓存字段名称并在缓存上执行 TryGet。

public Dictionary<string,int> CacheFields(IDataReader reader)
{

var cache = new Dictionary<string,int>();
for (int i = 0; i < reader.FieldCount; i++)
{
cache[reader.GetName(i)] = i;
}
return cache;
}

这种方法的好处是它更简单并且可以更好地控制。另外,请注意,您可能想要查看不区分大小写或不区分假名的比较,这会使事情变得有点棘手。

关于c# - IDataReader 和 "HasColumn",最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/429758/

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