我在网上找到了一个可行的答案
another forum
建议如下:
public void Fill(IDataReader dr)
{
if (dr.ColumnExists("BgId"))
{
BgId = Convert.ToInt32(Null.SetNull(dr["BgId"], BgId));
}
//do the above for all the properties
}
通过在IDataReader上编写一个扩展方法,并借助以下两个答案,找到了更好的方法(
@JamesEggers
和
@Chad Grant
)
/// <summary>
/// Check if the column exists in the datareader before accessing its value
/// </summary>
/// <param name="reader">DataReader</param>
/// <param name="columnName">Column name</param>
/// <returns>True if column exists, false if not</returns>
public static bool ColumnExists(this IDataReader reader, string columnName)
{
for (int i = 0; i < reader.FieldCount; i++)
{
if (reader.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
}
return false;
}