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")),
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;
}
/// <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));
}
}