Ciao, uso in DB access che risiede su WIN 2000 ENG mentre sto facendo le prove su XP ITA, indipendentemente da questo in entrambi i casi ottengo un errore quando cerco di salvare un valore decimale, cosa sbaglio??
Le ho provate tutteCodice PHP:OleDbCommand myCommand = new OleDbCommand("SP_FatturaLiberoDettaglio_Update", myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
myCommand.Parameters.Add(new OleDbParameter("@DescrizioneDilazione", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@Iva", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@UM", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@Sconto", OleDbType.Integer));
myCommand.Parameters.Add(new OleDbParameter("@Quantita", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@Valore", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@Imponibile", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@TotaleRiga", OleDbType.Integer));
myCommand.Parameters.Add(new OleDbParameter("@Sc", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@IDRiga", OleDbType.VarChar));
myCommand.Parameters["@DescrizioneDilazione"].Value = DescrizioneRigaIns.Text;
myCommand.Parameters["@Iva"].Value = IVAIns.SelectedValue;
myCommand.Parameters["@UM"].Value = Um.Text;
myCommand.Parameters["@Sconto"].Value = "0";
myCommand.Parameters["@Quantita"].Value = Convert.ToDecimal(Qt.Text).ToString();
if (ddlSconto.SelectedValue == "1")
{
decimal valimporto = 0;
decimal valimponibile = 0;
decimal valtotale = 0;
valimporto = Convert.ToDecimal(Importo.Text) * (-1);
valimponibile = Convert.ToDecimal(Imponibile.Text) * (-1);
valtotale = Convert.ToDecimal(TotaleRiga.Text) * (-1);
myCommand.Parameters["@Valore"].Value = valimporto.ToString();
myCommand.Parameters["@Imponibile"].Value = valimponibile.ToString();
myCommand.Parameters["@TotaleRiga"].Value = valtotale.ToString();
}
else
{
myCommand.Parameters["@Valore"].Value = Convert.ToDecimal(Importo.Text).ToString();
myCommand.Parameters["@Imponibile"].Value = Convert.ToDecimal(Imponibile.Text).ToString();
myCommand.Parameters["@TotaleRiga"].Value = Convert.ToDecimal(TotaleRiga.Text).ToString();
}
myCommand.Parameters["@TotaleRiga"].Value = TotaleRiga.Text;
myCommand.Parameters["@Sc"].Value = ddlSconto.SelectedValue;
myCommand.Parameters["@IDRiga"].Value = IDRigaTxt.Text;
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
a mettere:
valimponibile.ToString();
Convert.ToDecimal(valimponibile.ToString());
quello che sono sicura è che l'errore si verifica SOLO quando inserisco un valore con decimali in Quantita o Valore
Nel DB il campo è di tipo valuta!
Un altro comportamente strano è che in fase di inserimento funziona perfettamente (vengono salvati i decimali), l'errore si verifica (sempre modificando quantita e valore) in fase di modifica. Per completezza allego le due porzioni di codice (insert e update)
Grazie in anticipo
L'update l'ho inserito prima (ed è quello che mi da problemi)
L'insert è questo, e NON da problemi (stranissimo)
Codice PHP:
OleDbCommand myCommand = new OleDbCommand("SP_FatturaLiberoDettaglio_Insert", myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
myCommand.Parameters.Add(new OleDbParameter("@NumeroFattura", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@Data", OleDbType.Date));
myCommand.Parameters.Add(new OleDbParameter("@DescrizioneDilazione", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@UM", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@Sconto", OleDbType.Integer));
myCommand.Parameters.Add(new OleDbParameter("@Quantita", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@Valore", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@Imponibile", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@Iva", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@TotaleRiga", OleDbType.Decimal));
myCommand.Parameters.Add(new OleDbParameter("@VoceCosto", OleDbType.VarChar));
myCommand.Parameters.Add(new OleDbParameter("@Sc", OleDbType.Integer));
myCommand.Parameters["@NumeroFattura"].Value = NumeroDoc.Text.ToString();
myCommand.Parameters["@Data"].Value = DataDoc.Text;
myCommand.Parameters["@DescrizioneDilazione"].Value = DescrizioneRigaIns.Text;
myCommand.Parameters["@UM"].Value = Um.Text;
myCommand.Parameters["@Sconto"].Value = "0";
myCommand.Parameters["@Quantita"].Value = Convert.ToDecimal(Qt.Text).ToString();
if (ddlSconto.SelectedValue == "1")
{
decimal valimporto = 0;
decimal valimponibile = 0;
valimporto = Convert.ToDecimal(Importo.Text) * (-1);
valimponibile = Convert.ToDecimal(Imponibile.Text) * (-1);
myCommand.Parameters["@Valore"].Value = valimporto.ToString();
myCommand.Parameters["@Imponibile"].Value = valimponibile.ToString();
}
else
{
myCommand.Parameters["@Valore"].Value = Convert.ToDecimal(Importo.Text).ToString();
myCommand.Parameters["@Imponibile"].Value = Convert.ToDecimal(Imponibile.Text).ToString();
}
// myCommand.Parameters["@Valore"].Value = Importo.Text;
// myCommand.Parameters["@Imponibile"].Value = Imponibile.Text;
myCommand.Parameters["@Iva"].Value = IVAIns.SelectedValue;
if (ddlSconto.SelectedValue == "1")
{
decimal valtotale = 0;
valtotale = Convert.ToDecimal(TotaleRiga.Text) * (-1);
myCommand.Parameters["@TotaleRiga"].Value = valtotale.ToString();
}
else
{
myCommand.Parameters["@TotaleRiga"].Value = TotaleRiga.Text;
}
myCommand.Parameters["@VoceCosto"].Value = "700-1";
myCommand.Parameters["@Sc"].Value = ddlSconto.SelectedValue;
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();

Rispondi quotando