From 0dd74b0d5926eff111619f2920f9dbc4a1065e2b Mon Sep 17 00:00:00 2001 From: SmartRootsSrl Date: Wed, 27 May 2026 17:37:38 +0200 Subject: [PATCH] fix: use ToDecimal helper for float/decimal compatibility in cedlab_Chart_UL1 reader (PriceWorst, PriceWorstPerc are float) --- .../Implementations/ChartDataServiceV2.cs | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs b/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs index 94ded5c..481aa04 100644 --- a/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs +++ b/CertReports.Syncfusion/Services/Implementations/ChartDataServiceV2.cs @@ -49,19 +49,19 @@ public class ChartDataServiceV2 : IChartDataServiceV2 IDCertificates = r.GetInt32(r.GetOrdinal("IDCertificates")), IDUnderlyings = r.GetInt32(r.GetOrdinal("IDUnderlyings")), StartDate = r.GetDateTime(r.GetOrdinal("StartDate")), - Strike = r.GetDecimal(r.GetOrdinal("Strike")), - BarrieraCouponPerc = r.GetDecimal(r.GetOrdinal("BarrieraCouponPerc")), - BarrieraCoupon = r.GetDecimal(r.GetOrdinal("BarrieraCoupon")), - BarrieraCapitalePerc = r.GetDecimal(r.GetOrdinal("BarrieraCapitalePerc")), - BarrieraCapitale = r.GetDecimal(r.GetOrdinal("BarrieraCapitale")), + Strike = ToDecimal(r, "Strike"), + BarrieraCouponPerc = ToDecimal(r, "BarrieraCouponPerc"), + BarrieraCoupon = ToDecimal(r, "BarrieraCoupon"), + BarrieraCapitalePerc = ToDecimal(r, "BarrieraCapitalePerc"), + BarrieraCapitale = ToDecimal(r, "BarrieraCapitale"), Sottostante = r.GetString(r.GetOrdinal("Sottostante")), IsWorstOf = r.GetInt32(r.GetOrdinal("IsWorstOf")), - PriceWorst = r.GetDecimal(r.GetOrdinal("PriceWorst")), - PriceWorstPerc = r.GetDecimal(r.GetOrdinal("PriceWorstPerc")), + PriceWorst = ToDecimal(r, "PriceWorst"), + PriceWorstPerc = ToDecimal(r, "PriceWorstPerc"), NumPrezziCFT = r.GetInt32(r.GetOrdinal("NumPrezziCFT")), NomeCFT = r.GetString(r.GetOrdinal("NomeCFT")), - TriggerAutocallPerc = r.GetDecimal(r.GetOrdinal("TriggerAutocallPerc")), - AutocallValue = r.GetDecimal(r.GetOrdinal("AutocallValue")), + TriggerAutocallPerc = ToDecimal(r, "TriggerAutocallPerc"), + AutocallValue = ToDecimal(r, "AutocallValue"), }); } } @@ -92,7 +92,7 @@ public class ChartDataServiceV2 : IChartDataServiceV2 { IDUnderlyings = r.GetInt32(r.GetOrdinal("IDUnderlyings")), 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; } + + /// + /// 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). + /// + 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)); + } }