我已经看到了两种常见的方法来检查 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 可能必须对每列进行一次表扫描,这可能非常慢。
想法?