列が IDataReader に存在するかどうかを確認するための 2 つの一般的な方法を見てきました。
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);
}
個人的には、この理由で例外を使用するのが嫌いなので、2 番目のものを使用しました。
ただし、大規模なデータセットでは、RowFilter が列ごとにテーブル スキャンを実行する必要があり、これは非常に遅くなる可能性があると思います。
考え?