Fehler bei INSERT INTO in einer AccessDB mit C#

Hallo

und schon mal von Beginn an Danke für die Hilfe.
Mein Problem liegt beim INSERT INTO. Und zwar nicht beim Code direkt sonder bei der Übergabe zur Datenbank.

Am besten ich beschreib es an einem Beispiel:

Sagen wir, ich habe 2 Process, so dass das Insert Into wie folgt aussieht:

  1. 1, Bohren, Maschine2, 30, 30
  2. 2, Schleifen, Maschine3, 60, 60

Nun hab ich das mit einer Konsolenausgabe schon überprüft und laut der cmd.CommandText - Zeile wird auch alles richtig Übergeben. Aber in meiner Datenbank steht nun folgendes.

1, Bohren, Maschine2, 30, 30
2, Bohren, Maschine2, 60, 60

foreach (Process p in processChain)
{
string x =p.EnteredXPos.ToString();
string y = p.EnteredYPos.ToString();
x = x.Replace(",", „.“);
y = y.Replace(",", „.“);

cmd.CommandText =
„INSERT INTO " + this.savingName +
" VALUES(“ + p.PID + ", " + @p.Operation

  • ", " + @p.MachineAsString + ", " + @x + ", " + @y + „);“;

cmd.Parameters.Add("@p.Operation", OleDbType.VarChar).Value = p.Operation;
cmd.Parameters.Add("@p.MachineAsString",OleDbType.VarChar).Value = p.MachineAsString;

cmd.Parameters.Add("@x",OleDbType.VarChar).Value = x;

cmd.Parameters.Add("@y",OleDbType.VarChar).Value = y;

cmd.ExecuteNonQuery();

}

Hallo,

ohne das jetzt nachprüfen zu können:
Könnte es sein, dass der Fehler darin liegt, dass Du pro Schleifendurchlauf jedesmal Parameter zu cmd hinzufügst und dass die DB das „ducheinanderbringt“? Du solltest vor dem Schleifenbeginn die Parameter zu cmd hinzufügen und innerhalb der Schleife den Parametern den Wert zuweisen. cmd.CommandText könntest Du auch vor den Schleifenbeginn legen, wenn Du PID ebenfalls als Parameter übergibst.

Gruß
Thomas

Ha. Top.

An die Möglichkeit hatte ich gar nicht gedacht.

Danke.

Hallo!
Der Fehler liegt in der Art und Weise, wie Du versuchst, die Parameter innerhalb des VALUES(…) Bereichs anzugeben.

M.M. nach müsste es statt

" VALUES(" + p.PID + ", " + @p.Operation
+ ", " + @p.MachineAsString + ", " + @x + ", " + @y + ");"

heissen

" VALUES(" + p.PID + ", @p.Operation, @p.MachineAsString, @x, @y);"

Ob die Notation mit @ am Anfang für Access korrekt ist, kann ich leider aus dem Kopf nicht sagen, aber Du wirst es ja irgendwo her haben :smile:

Gruß,
Martin