我见过两种在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可能需要对每列进行表扫描,这可能会非常慢。
有什么想法?