fix: use ToDecimal helper for float/decimal compatibility in cedlab_Chart_UL1 reader (PriceWorst, PriceWorstPerc are float)
This commit is contained in:
@@ -49,19 +49,19 @@ public class ChartDataServiceV2 : IChartDataServiceV2
|
|||||||
IDCertificates = r.GetInt32(r.GetOrdinal("IDCertificates")),
|
IDCertificates = r.GetInt32(r.GetOrdinal("IDCertificates")),
|
||||||
IDUnderlyings = r.GetInt32(r.GetOrdinal("IDUnderlyings")),
|
IDUnderlyings = r.GetInt32(r.GetOrdinal("IDUnderlyings")),
|
||||||
StartDate = r.GetDateTime(r.GetOrdinal("StartDate")),
|
StartDate = r.GetDateTime(r.GetOrdinal("StartDate")),
|
||||||
Strike = r.GetDecimal(r.GetOrdinal("Strike")),
|
Strike = ToDecimal(r, "Strike"),
|
||||||
BarrieraCouponPerc = r.GetDecimal(r.GetOrdinal("BarrieraCouponPerc")),
|
BarrieraCouponPerc = ToDecimal(r, "BarrieraCouponPerc"),
|
||||||
BarrieraCoupon = r.GetDecimal(r.GetOrdinal("BarrieraCoupon")),
|
BarrieraCoupon = ToDecimal(r, "BarrieraCoupon"),
|
||||||
BarrieraCapitalePerc = r.GetDecimal(r.GetOrdinal("BarrieraCapitalePerc")),
|
BarrieraCapitalePerc = ToDecimal(r, "BarrieraCapitalePerc"),
|
||||||
BarrieraCapitale = r.GetDecimal(r.GetOrdinal("BarrieraCapitale")),
|
BarrieraCapitale = ToDecimal(r, "BarrieraCapitale"),
|
||||||
Sottostante = r.GetString(r.GetOrdinal("Sottostante")),
|
Sottostante = r.GetString(r.GetOrdinal("Sottostante")),
|
||||||
IsWorstOf = r.GetInt32(r.GetOrdinal("IsWorstOf")),
|
IsWorstOf = r.GetInt32(r.GetOrdinal("IsWorstOf")),
|
||||||
PriceWorst = r.GetDecimal(r.GetOrdinal("PriceWorst")),
|
PriceWorst = ToDecimal(r, "PriceWorst"),
|
||||||
PriceWorstPerc = r.GetDecimal(r.GetOrdinal("PriceWorstPerc")),
|
PriceWorstPerc = ToDecimal(r, "PriceWorstPerc"),
|
||||||
NumPrezziCFT = r.GetInt32(r.GetOrdinal("NumPrezziCFT")),
|
NumPrezziCFT = r.GetInt32(r.GetOrdinal("NumPrezziCFT")),
|
||||||
NomeCFT = r.GetString(r.GetOrdinal("NomeCFT")),
|
NomeCFT = r.GetString(r.GetOrdinal("NomeCFT")),
|
||||||
TriggerAutocallPerc = r.GetDecimal(r.GetOrdinal("TriggerAutocallPerc")),
|
TriggerAutocallPerc = ToDecimal(r, "TriggerAutocallPerc"),
|
||||||
AutocallValue = r.GetDecimal(r.GetOrdinal("AutocallValue")),
|
AutocallValue = ToDecimal(r, "AutocallValue"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ public class ChartDataServiceV2 : IChartDataServiceV2
|
|||||||
{
|
{
|
||||||
IDUnderlyings = r.GetInt32(r.GetOrdinal("IDUnderlyings")),
|
IDUnderlyings = r.GetInt32(r.GetOrdinal("IDUnderlyings")),
|
||||||
Date = r.GetDateTime(r.GetOrdinal("Px_date")),
|
Date = r.GetDateTime(r.GetOrdinal("Px_date")),
|
||||||
Performance = r.GetDecimal(r.GetOrdinal("Performance")),
|
Performance = ToDecimal(r, "Performance"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,4 +103,16 @@ public class ChartDataServiceV2 : IChartDataServiceV2
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Legge un campo numerico come decimal indipendentemente dal tipo SQL
|
||||||
|
/// (decimal, float, real, int). Necessario perché cedlab_Chart_UL1 ritorna
|
||||||
|
/// alcuni campi come float (es. PriceWorst dalla subquery su Prices.Px_close).
|
||||||
|
/// </summary>
|
||||||
|
private static decimal ToDecimal(SqlDataReader r, string column)
|
||||||
|
{
|
||||||
|
int ord = r.GetOrdinal(column);
|
||||||
|
if (r.IsDBNull(ord)) return 0m;
|
||||||
|
return Convert.ToDecimal(r.GetValue(ord));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user