2016-06-27 11 views
1

Ich bekomme diesen Fehler oft, ich muss es ein für alle Mal mit Ihnen helfen helfen Ich bekomme "Syntaxfehler in Update-Anweisung", wenn ich auf meine Update-Schaltfläche klicke. ..Subsequently haben unterschiedlichen Code Ansatz versucht, diesen Fehler zu lösen, aber es ist alles Blei Hier Gebrauch zu machen ist mein Code:Schwierigkeit beim Aktualisieren der Reihe von Datensätzen in Access-Datenbank

try 
    { 

     // UPDATE Categories SET CategoryName = @categoryname, Description = @categorydescription WHERE (CategoryID = @categoryid) 
     string query = "UPDATE Cashier SET Surname = @Surname, Firstname = @Firstname, Othername = @Othername, Username = @Username, Password = @Password, Phonenumber = @Phonenumber, Email = @Email WHERE (ID = @ID)"; 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd = new OleDbCommand(query, connect); 

     if (MessageBox.Show("Are you sure you want to save?...", "Confirmation Message", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) 
     { 
      //cmd.Parameters.AddWithValue("@ID",OleDbType.VarChar).Value = ID; 
      cmd.Parameters.AddWithValue("@Surname",OleDbType.VarChar).Value = Surname; 
      cmd.Parameters.AddWithValue("@Firstname",OleDbType.VarChar).Value = Firstname; 
      cmd.Parameters.AddWithValue("@Othername",OleDbType.VarChar).Value = Othername; 
      cmd.Parameters.AddWithValue("@Username",OleDbType.VarChar).Value = Username; 
      cmd.Parameters.AddWithValue("@Password",OleDbType.VarChar).Value = Password; 
      cmd.Parameters.AddWithValue("@Phonenumber",OleDbType.VarChar).Value = Phonenumber; 
      cmd.Parameters.AddWithValue("@Email",OleDbType.VarChar).Value = Email; 
      //OleDbDataReader dr; 
      //dr = cmd.ExecuteReader(); 
      connect.Open(); 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("Data Successfully Updated!!!"); 
      connect.Close(); 

      textBox1.Clear(); 
      textBox2.Clear(); 
      textBox3.Clear(); 
      textBox4.Clear(); 
      textBox5.Clear(); 
      textBox6.Clear(); 
      textBox7.Clear(); 
      textBox8.Clear(); 
     } 


     else 
     { 
      this.Show(); 
     } 
    } 

    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
+2

Kennwort ein reserviertes Wort ist, entkommen sie: '[Passwort]', aber Sie sollten wirklich nie Passwörter als Klartext speichern: Salz und Hash ihnen. Sie sollten sich auch angewöhnen, 'Add' anstelle von' AddWithValue' zu ​​verwenden ... und Ihre App leckt. – Plutonix

+0

owk ... jetzt bekomme ich "Dateityp mis match in citeria ausdruck" Fehler ... keine Hilfe? –

+0

Wahrscheinlich ist das Problem mit Ihrem @ ID-Parameter. In Ihrem mitgelieferten Code haben Sie es auskommentiert, aber ich denke, es muss ein int sein statt einer varchar ... – Pikoh

Antwort

0

AddWithValue wie folgt erklärt:

public OleDbParameter AddWithValue(
    string parameterName, 
    object value 
) 

Dh: der zweite Parameter muss der Wert sein e, kein Typ.

cmd.Parameters.AddWithValue("@Surname", Surname); 

oder verwenden Add

cmd.Parameters.Add("@Surname", OleDbType.VarChar).Value = Surname; 
+0

ich schätze wirklich, dass Sie mir helfen wollen ... ich tat, wie Sie es angewiesen haben und bekomme immer noch "Datentyp stimmt nicht mit Kriterien überein". Fehler ... Alle meine Spalten sind im "long text" -Datentyp mit Ausnahme der Nummer der Telefonnummer, die ich als "Nummer" und ID in "Auto Number" markiert habe ... –

+0

Nicht nur der Typparameter 'OleDbType' muss übereinstimmen, sondern auch der Wert, der an den Parameter übergeben wird. D. h., Wenn die Telefonnummer als String (von einer TextBox) gegeben wird, dann wandle sie zuerst in ein "int" um oder was immer am besten zu dem Typ der Spalte passt. In Access haben Number-Spalten einen Untertyp: Long, Double, Decimal usw. –

+0

Wenn 'Phonenumber' eine Zahlenspalte ist, dann ist' OleDbType.VarChar' sicherlich falsch. –

Verwandte Themen