I have two cases to extract information from the IDataReader object
public static string GetString(IDataReader rdr, string columnName)
{
int ordinal = rdr.GetOrdinal(columnName);
if (rdr.IsDBNull(ordinal))
{
return string.Empty;
}
return (string)rdr[ordinal];
}
public static string GetString(IDataReader rdr, string columnName)
{
return (string)rdr[columnName];
}
Which technique should be preferred and why and if any specific context ?
SqlDataReader's this[string name]
looks like:
public override object this[string name]
{
get
{
return this.GetValue(this.GetOrdinal(name));
}
}
so it calculates ordinal internaly, and there is no difference what way to use.
UPDATE
Yo can rewrite your code as:
public static string GetString(IDataReader rdr, string columnName)
{
return (rdr[columnName] as String)??String.Empty;
}