Come l'eccezione ha sottolineato, è necessario impostare in modo esplicito le proprietà SqlParameter.Precision
e SqlParameter.Scale
al fine di utilizzare il tipo di decimal
come parametro.
Diciamo che il campo SQL sia di tipo decimal(18,8)
. Il modo per farlo in linea è quello di utilizzare brace-inizializzazione per lo SqlParameter, mentre l'aggiunta al SqlParameterCollection
, come segue:
cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) {
Precision = 18, Scale = 8 });
Si può anche fare
cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) {
Precision = 18, Scale = 8}).Value = 0.4m; // or whatever
per aggiungere il valore, se si bisogno di uno. Si potrebbe anche fare
cmd.Parameters.Add(new SqlParameter("@ordGty", SqlDbType.Decimal) {
Precision = 18, Scale = 8, Value = 0.4m /* or whatever */});
se si preferisce. Brace initialization è davvero potente.
Nota a margine: mi rendo conto che si tratta di una vecchia domanda, ma penso che questo modulo sia molto più leggibile rispetto alla creazione dell'oggetto mentre lo aggiunge all'elenco e quindi imposta la scala e la precisione. Per i posteri! (poiché si tratta di un risultato di ricerca google con un elevato numero di annunci)
Hai una domanda? Cosa trovi poco chiaro sull'errore? – Oded
Salve, Sì Sto ottenendo l'eccezione di cui sopra per impostare la precisione e la scala. –
E? Cosa non è chiaro sull'errore? È necessario impostare precisione e scala. – Oded