У меня есть этот код, где ISTM я защищаю от присвоения нулей:
foreach (DataRow priceAndUsageVarianceRow in _dtUsage.Rows)
{
//var pauv = new PriceAndUsageVariance
//{
// Description = priceAndUsageVarianceRow["Description"].ToString(),
// Week1Usage = Convert.ToDouble(priceAndUsageVarianceRow["Week1Usage"]),
// Week2Usage = Convert.ToDouble(priceAndUsageVarianceRow["Week2Usage"]),
// UsageVariance = Convert.ToDouble(priceAndUsageVarianceRow["UsageVariance"]),
// Week1Price = Convert.ToDecimal(priceAndUsageVarianceRow["Week1Price"]),
// Week2Price = Convert.ToDecimal(priceAndUsageVarianceRow["Week2Price"]),
// PriceVariance = Convert.ToDecimal(priceAndUsageVarianceRow["PriceVariance"]),
// PriceVariancePercentage = Convert.ToDouble(priceAndUsageVarianceRow["PriceVariancePercentage"])
//};
// Got exception with the code above; trying to prevent it with this:
var pauv = new PriceAndUsageVariance();
pauv.Description = String.Empty;
pauv.Week1Usage = 0.0;
pauv.Week2Usage = 0.0;
pauv.UsageVariance = 0.0;
pauv.Week1Price = 0.00M;
pauv.Week2Price = 0.00M;
pauv.PriceVariance = 0.00M;
pauv.PriceVariancePercentage = 0.0;
if (null != priceAndUsageVarianceRow["Description"])
{
pauv.Description = priceAndUsageVarianceRow["Description"].ToString();
}
if (null != priceAndUsageVarianceRow["Week1Usage"])
{
pauv.Week1Usage = Convert.ToDouble(priceAndUsageVarianceRow["Week1Usage"]);
}
if (null != priceAndUsageVarianceRow["Week2Usage"])
{
pauv.Week2Usage = Convert.ToDouble(priceAndUsageVarianceRow["Week2Usage"]);
}
. . .
... тем не менее, я получаю "Объект не может быть преобразован из DBNull в другие типы" на определенной итерации при последней попытке назначения (в pauv.Week2Usage).
Это поле появляется в классе:
public class PriceAndUsageVariance
{
public String Description { get; set; }
public Double Week1Usage { get; set; }
public Double Week2Usage { get; set; }
public Double UsageVariance { get; set; }
public Decimal Week1Price { get; set; }
public Decimal Week2Price { get; set; }
public Decimal PriceVariance { get; set; }
public Double PriceVariancePercentage { get; set; }
}
... и код работает нормально для большинства записей.
Что может вызвать это исключение и как я могу защититься от него?