Il testo di inserimento sql non utilizza parametri.
Questa è la causa di bug e peggio (SqlInjection)
Modificare il codice in questo modo;
using(OleDbConnection myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings["DbConn"].ToString()))
{
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into Items ([Item_Name],[Item_Price]) values (?,?);
cmd.Parameters.AddWithValue("@item", itemNameTBox.Text);
cmd.Parameters.AddWithValue("@price", Convert.ToDouble(itemPriceTBox.Text));
cmd.Connection = myCon;
myCon.Open();
cmd.ExecuteNonQuery();
System.Windows.Forms.MessageBox.Show("An Item has been successfully added", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
}
Naturalmente questo presuppone che la casella di testo per il prezzo contenga un valore numerico corretto.
Per essere sicuri aggiungere questa riga prima di chiamare il codice di cui sopra
double price;
if(double.TryParse(itemPriceTBox.Text, out price) == false)
{
MessageBox.Show("Invalid price");
return;
}
quindi utilizzare price
come valore per il parametro @price
** EDIT 4 anni più tardi **
Questa risposta ha bisogno di un aggiornamento . Nel codice sopra, utilizzo AddWithValue per aggiungere un parametro all'insieme Parameters. Funziona ma ogni lettore dovrebbe essere avvisato che AddWithValue ha alcuni svantaggi. In particolare se si cade per il percorso facile da aggiungere solo stringhe quando la colonna di destinazione si aspetta valori o date decimali. In questo contesto, se avessi scritto solo
cmd.Parameters.AddWithValue("@price", itemPriceTBox.Text);
il risultato potrebbe essere un errore di sintassi o una sorta di strano la conversione del valore e lo stesso potrebbe accadere con le date. AddWithValue crea una stringa Parametro e il motore del database dovrebbe convertire il valore nel tipo di colonna previsto. Ma le differenze nelle impostazioni locali tra il client e il server potrebbero creare qualsiasi tipo di errata interpretazione del valore.
Penso che sia sempre meglio usare
cmd.Parameters.Add("@price", OleDbType.Decimal).Value =
Convert.ToDecimal(itemPriceTBox.Text);
Maggiori informazioni AddWithValue problems can be found here
Si ottiene lo stesso problema quando si rimuove le virgolette singole intorno Convert.ToDouble (itemPriceTBox.Text)? –