rdr.Read();// get the idint id = rdr.GetInt32(0);// get the 29 precision value just finedecimal validDecimal = rdr.GetDecimal(1);// this errors out ...decimal invalidDecimal = rdr.GetDecimal(2);// so does this ...decimal invalidDecimal = rdr.GetSqlDecimal(2).Value;

// the only thing to do is to either pass around SqlDecimal class SqlDecimal invalidDecimalAsSqlDecimal = rdr.GetSqlDecimal(2);// or to cast it to stringstring invalidDecimalAsString = invalidDecimalAsSqlDecimal.ToString();