作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我见过两种检查 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/
我有一个名为 table1 的表和名为 id、name、field1、field2 的列、field3。 我想检查这些列是否存在。如果任何一列不存在,我想将该列添加到表中。 例如:我有名为 id、na
我见过两种检查 IDataReader 中是否存在列的常用方法: public bool HasColumn(IDataReader reader, string columnName) { tr
我正在尝试创建迁移,向现有表中添加一列。 为表执行初始创建的 up() 方法如下所示: public function up() { Schema::create('lead_
我是一名优秀的程序员,十分优秀!