Wie legen Sie einen Datensatz in eine access-Tabelle mit OLE-DB?
Ich habe eines dieser Elemente-Tabelle in ms access
Items(Table)
Item_Id(autonumber)
Item_Name(text)
Item_Price(currency)
und ich versuche, einen Datensatz einfügen mit diesem code.
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 ('" + itemNameTBox.Text + "','" + 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);
myCon.Close();
Code läuft ohne Fehler, aber am Ende kein Datensatz gefunden wird in der Tabelle, was für Fehler ich mache?
- Sie erhalten das gleiche Problem beim entfernen der Anführungszeichen zu Konvertieren.ToDouble(itemPriceTBox.Text)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre sql-insert-text nicht verwenden Parameter.
Dies ist die Ursache von bugs und schlechter (SQL-Injection)
Ändern Sie den code in dieser Art und Weise;
Natürlich setzt dies Voraus, dass der text-box zum Preis enthält, einen korrekten numerischen Wert.
Werden Sie sicher, fügen Sie diese Zeile vor dem Aufruf der code oben
dann verwenden
price
als Wert für den parameter@price
**EDIT 4 JAHRE SPÄTER **
Diese Antwort braucht ein update. In den obigen code verwende ich AddWithValue hinzufügen einen parameter an die Parameter-Auflistung. Es funktioniert, aber jeder Leser sollte darauf hingewiesen werden, dass AddWithValue hat einige Nachteile. Insbesondere wenn Sie fallen für den einfachen Weg zum hinzufügen nur strings, wenn der Ziel-Spalte rechnet dezimale Werte oder Datumsangaben. In diesem Zusammenhang, wenn ich geschrieben hatte, nur
die Folge könnte ein syntax-Fehler oder irgendeine Art von seltsamen Umbau der Wert und das gleiche könnte passieren mit den Daten. AddWithValue erzeugt einen string-Parameter und der Datenbank-engine sollte konvertieren Sie den Wert der zu erwartenden Spalte Typ. Aber die Unterschiede in locale zwischen dem client und dem server erstellen könnte jede Art von Fehlinterpretation der Wert.
Ich denke, dass es immer besser ist, zu verwenden
Mehr info auf AddWithValue Probleme können hier gefunden werden