Этот метод может быть полезен для того, что вы пытаетесь сделать. Он попытается проанализировать значение столбца в его соответствующем типе, и, если это не удастся, вернет значение по умолчанию для типов.
public T ParseValue<T>(System.Data.SqlClient.SqlDataReader reader, string column)
{
T result = default(T);
int index = reader.GetOrdinal(column);
if (!reader.IsDBNull(index))
result = (T)reader.GetValue(index);
return result;
}