Fehler beim speichern in der Datenbank

Horst1945

Grünschnabel
Ich bekomme immer eine Fehlermeldung beim abspeichern in der Datenbank.

strSQL = "Insert into Rechnung (jahr, kdnr, renr, lfNr, artnr, bestnr, liefdatum, redatum, menge, epreis, rabatt, rbSum)";
strSQL += " values( " + myNJahr + ", '" + txtKdNr.Text + "', '" + txtReNr.Text + "', '" + txtLfNr.Text + "'";
strSQL += " , '" + txtArtNr.Text + "', '" + txtBestNr.Text + "', '" + txtLfDatum.Text + "', '" + lblReDatum.Text + "', ";
strSQL += " " + myMenge + ", " + myEPreis + ", '" + txtRabatt.Text + "', " + myProzent+ ")";

Die Fehler lautet:

In der INSERT-Anweisung sind weniger Spalten angegeben als Werte in der VALUES-Klausel. Die Anzahl von Werten in der VALUES-Klausel und die Anzahl von in der INSERT-Anweisung angegebenen Spalten müssen übereinstimmen.

Um eine Lösung zu finden , bin ich in einzelschritten vorgegangen und haben die Daten von Tabellen-Feld zu Tabellen-Feld abgespeichert, erst als ich das Tabellen-Feld rbsum hinzugefügt hatte, bekam ich diese Fehlermeldung
 
Sieht erstmal richtig aus.
Prüf mal den Inhalt der Textboxen, könnte mir vorstellen das dort irgendeine Zeichenkosntellation enthalten ist welche deine SQL Anweisung "versaut".
Beispielsweise wenn in der Textbox ebenfalls ein ' enthalten ist.

Problem könnte auch sein das du bei myProzent die Deutsche Formatierung mit Komma als Dezimaltrennzeichen zurückbekommst, das würde dann auch als extra Spalte interpretiert werden.
 
Danke für deinen Hinweis, denn in der Text Box ist eine Komma enthalten. Und wie muss ich das machen, dass die Daten gespeichert werden?
 
Folgen sie der Code so aus:

C#:
private void Preisberechen(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
if (weiter == "1")
{
myMenge = Convert.ToInt16(txtMenge.Text);
myRabatt = Convert.ToInt16(txtRabatt.Text);
myEPreis = Convert.ToDecimal(txtEPreis.Text);
// Gesamtpreis Artikel
myGesPreis = myMenge * myEPreis;
myProzent = (myGesPreis / 100) * myRabatt;
myGesSum = myGesPreis - myProzent;
txtRBSum.Text = String.Format("{0:c}", myProzent);
txtGesPreis.Text = String.Format("{0:c}", myGesSum);

// MwSt berechnen
myMwSt = (myGesPreis / 100) * MwSt;
myZwSum = myGesPreis;
txtZWSumme.Text = String.Format("{0:c}", myGesSum);
txtMwSt.Text = String.Format("{0:c}", myMwSt);
//Endpreis
myEndPreis = myGesPreis + myMwSt;
txtEndPreis.Text = String.Format("{0:c}", myEndPreis);
//strSQL Insert-Datem
strSQL = "insert into Rechnung (jahr, kdnr, renr, lfnr, artnr, bestnr, liefDatum, redatum, menge, epreis) values ( " + myNJahr + ", '" + txtKdNr.Text + "', '" + txtReNr.Text + "', '" + txtLfNr.Text + "', ";
strSQL += " '" + txtArtNr.Text + "', '" + txtBestNr.Text + "', '" + txtLfDatum.Text + "', '" + lblReDatum.Text + "',";
strSQL += " " + myMenge + ", " + myEPreis + ")";
txtEPreis2.Focus();
weiter = "2";
}
 
Zuletzt bearbeitet von einem Moderator:
Ich bin Neuling in C# und weiß nicht wie es mit Insert Parmeter gehen soll?

Kannst du mir einmal einen besseren Tipp vorschlagen?
 
Hier mal ein Beispiel direkt mit Insert, für eine Access Datenbank.
http://stackoverflow.com/questions/5893837/using-parameters-inserting-data-into-access-database
(Die Antwort mit dem grünen Haken)

Du hast im Prinzip dein DbCommand (in diesem Beispiel dort ein OleDbCommand).
Übergibst dem DbCommandText deine SQL Anweisung und die Parameter.

Die Parameter im SQL sind mit dem @ als Präfix gekennzeichnet.

Hier auch nochmal was von den galileo books (genauere Erklärung der Paramter)
http://openbook.galileo-press.de/visual_csharp/visual_csharp_26_003.htm
(ich gebs zu ich habs jetzt nur kurz überflogen aber im Grunde sind die Leute bei galileo schon gut bei Dokumentationen)
 
Ich habe es mit Parameters versucht

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
mySqlCommand.CommandText = "insert imto rechnung (jahr, kdnr) values (@jahr, @Kdnr)";
mySqlCommand.Parameters.Add("@jahr", SqlDbType.Int);
mySqlCommand.Parameters.Add("@Kdnr", SqlDbType.NChar, 10);
mySqlCommand.Parameters["@jahr"].Value = myNJahr;
mySqlCommand.Parameters["@Kdnr"].Value = txtKdNr.Text;

mySqlConnection.Open();
mySqlCommand.ExecuteNonQuery();

und die Fehlermeldung "Falsche Syntax in Nähe vom 'Rechnung'" erscheint
 
Zuletzt bearbeitet:
Hallo Horst1945

Bitte manchmal auch selber kurz durchlesen, die Fehlermeldung sagt dir ja sogar wo du schauen musst:
Code:
"insert imto rechnung (jahr, kdnr) values (@jahr, @Kdnr)";

Viele Grüsse
Cromon
 
Ist alles klar. habe den Fehler auch bemerkt. Klappt alles wunderbar. nur wenn ich einen zweiten Datensatz speichern will, bekomme ich den Fehler: "Verbindung ist nicht geschlossen!!
 
Zurück