2016-04-09 10 views
0

Ich habe diese MethodeSQL Update-Befehl nicht funktioniert, betroffenen Zeilen 0 zurück

public void Update(int id, string name) 
    { 
     OpenConnection(); 
     using (OleDbCommand update = new OleDbCommand("UPDATE Students SET Name = @name WHERE ID = @id", databaseConnection)) 
     { 
      update.Parameters.AddWithValue("@id", id); 
      update.Parameters.AddWithValue("@name", name); 
      MessageBox.Show(update.ExecuteNonQuery().ToString()); 
     } 
     CloseConnection(); 
    } 

Wenn es läuft, bekomme ich 0 Zeilen betroffen. Ich habe versucht, den Befehl in einen Auswahlblock einzuschließen.

  using (OleDbCommand select = new OleDbCommand("SELECT * FROM Students WHERE ID = @id", databaseConnection)) 
     { 
      select.Parameters.AddWithValue("@id", id); 
      using (OleDbDataReader reader = select.ExecuteReader()) 
      { 
       using (OleDbCommand update = new OleDbCommand("UPDATE Students SET Name = @name WHERE ID = @id", databaseConnection)) 
       { 
        update.Parameters.AddWithValue("@id", id); 
        update.Parameters.AddWithValue("@name", name); 
        MessageBox.Show(update.ExecuteNonQuery().ToString()); 
       } 
      } 
     } 

Wenn Sie dies tun, wird das Meldungsfeld noch ausgelöst und gibt 0 Zeilen betroffen. Was mache ich hier falsch?

+0

Sind Sie sicher, dass eine Zeile mit der es 'id' Sie zur Verfügung stellen? Enthält der "Leser" etwas? –

+0

Ist die ID in der Datenbank vorhanden, die Sie in den ID-Parameter eingeben, und setzen Sie die ID-Variable? Überprüfen Sie die SQL innerhalb des Updates vor der Ausführung, wenn Sie können. – ManoDestra

+0

@ RenéVogt Ich setze die ID auf eine Konstante zum testen und es hat immer noch das gleiche Ergebnis. –

Antwort

1

Oledb akzeptiert keine benannten Parameter. Verwenden Sie "?" ersetzen Sie Ihre benannten Parameter und ordnen Sie Ihre hinzugefügten Werte so an, dass sie der Position in Bezug auf Ihre Abfrage entsprechen.

Siehe diese Dokumentation.

oledb parameter

+0

Es unterstützt named paramaters. [Documentation.] (Https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter (v = vs.110) .aspx) –

+0

Die Dokumente besagt, dass es statt Parameterparameter positionelle Parameter verwendet Verweis auf ur sql. Versuchen Sie, die genannten Parameter durch? in deinem sql. Und AddWithValue (Atname, Name) zuerst b4 die ID. – yonas