fix: use ToDecimal helper for float/decimal compatibility in cedlab_Chart_UL1 reader (PriceWorst, PriceWorstPerc are float)

This commit is contained in:
2026-05-27 17:37:38 +02:00
parent 679f9e4528
commit 0dd74b0d59

View File

@@ -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));
}
} }