System.Decimal cannot represent a value such as 1.09E+30. See here:
Decimal Structure[
^]
The binary representation of a Decimal value consists of a 1-bit sign, a 96-bit integer number, and a scaling factor used to divide the 96-bit integer and specify what portion of it is a decimal fraction. The scaling factor is implicitly the number 10, raised to an exponent ranging from 0 to 28. Therefore, the binary representation of a Decimal value the form, ((-2^96 to 2^96) / 10^(0 to 28)), where -(2^96-1) is equal to MinValue, and 2^96-1 is equal to MaxValue.
You have to use System.Double instead.
double amount;
double.TryParse(ds.Tables[0].Rows[row][col].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out amount);
[Edit]
If you want to present the value differently, you should write:
string stringRepresentationOfDoubleValue = amount.ToString("#,##0");
Regarding number format strings, please refer to:
Custom Numeric Format Strings[
^]
[/Edit]