2017-04-07 3 views
0

so habe ich die Update-Anweisung funktioniert und der Datensatz in der Datenbank wird aktualisiert. Das Programm gibt jedoch einen Fehler aus, nachdem der Datensatz aktualisiert wurde.Aktualisieren von VB.Net-Datenbank mit SQL-Update-Anweisung

Fehler

Eine nicht behandelte Ausnahme des Typs ‚System.Data.OleDb.OleDbException‘ aufgetreten in System.Data.dll

Zusätzliche Informationen: Die Änderungen, die Sie an den Tisch gebeten, waren nicht erfolgreich, weil Sie würden doppelte Werte im Index, Primärschlüssel oder in der Beziehung erzeugen. Ändern Sie die Daten in dem Feld oder den Feldern, die doppelte Daten enthalten, entfernen Sie den Index, oder definieren Sie den Index neu, um doppelte Einträge zuzulassen, und versuchen Sie es erneut.

-Code

 Dim variable As String 
     dsConnectionM.Open() 
     variable = "UPDATE Member SET MemberID = '" & Form3.tbid.Text & "', Forename = '" & Form3.tbfn.Text & "' " 
     Dim cmd As OleDbCommand = New OleDbCommand(variable, dsConnectionM) 
     cmd.ExecuteNonQuery() 
     dsConnectionM.Close() 

I don't know if this is normal but when ran a second Access file for the database is created

This shows the contents of "Member" in the databse

EDITED

Ich begann Parameter verwenden, wie ich ich einen anderen Fehler bekommen jetzt beraten.

ERROR

Eine nicht behandelte Ausnahme des Typs 'System.Data.OleDb.OleDbException' aufgetreten in System.Data.dll

Zusätzliche Informationen: Syntaxfehler in der Anweisung UPDATE.

CODE

Dim variable As String 
dsConnectionM.Open() 
variable = "UPDATE Member 
      SET Forename = @Forename, 
       Surname = @Surname, 
       DOB = @DOB, 
       Section = @Section, 
       Postcode = @Postcode, 
       HomeTel = @HomeTel, 
       MobileTel = @MobileTel, 
       AddressLine1 = @AddressLine1, 
       AddressLine2 = @AddressLine2, 
       City = @City, 
       EmailAddress = @EmailAddress, 
       P/GForename = @P/GForename, 
       P/GSurname = @P/GSurname 
      WHERE MemberID = @MemberID" 
     Dim cmd As OleDbCommand = New OleDbCommand(variable, dsConnectionM) 
     cmd.Parameters.AddWithValue("@MemberID", Form3.tbid.Text) 
     cmd.Parameters.AddWithValue("@Forename", Form3.tbfn.Text) 
     cmd.Parameters.AddWithValue("@Surname", Form3.tbsn.Text) 
     cmd.Parameters.AddWithValue("@DOB", Form3.dtpdob.Value) 
     cmd.Parameters.AddWithValue("@Section", Form3.tbsr.Text) 
     cmd.Parameters.AddWithValue("@Postcode", Form3.tbpc.Text) 
     cmd.Parameters.AddWithValue("@HomeTel", Form3.tbht.Text) 
     cmd.Parameters.AddWithValue("@MobileTel", Form3.tbmt.Text) 
     cmd.Parameters.AddWithValue("@AddressLine1", Form3.tbal1.Text) 
     cmd.Parameters.AddWithValue("@AddressLine2", Form3.tbal2.Text) 
     cmd.Parameters.AddWithValue("@City", Form3.tbc.Text) 
     cmd.Parameters.AddWithValue("@EmailAddress", Form3.tbea.Text) 
     cmd.Parameters.AddWithValue("@P/GForename", Form3.tbpgfn.Text) 
     cmd.Parameters.AddWithValue("@P/GSurname", Form3.tbpgsn.Text) 
     cmd.ExecuteNonQuery() 
     dsConnectionM.Close() 
+2

aussehen Die Fehlermeldung klar ist, dass Sie MemberID auf einen Wert bereits in der DB so bewirkt, dass ein Primärschlüssel/Einzigartige Constrain Verletzung zu setzen versuchen. –

+0

Beide Anweisungen (es aktualisiert und löst eine Ausnahme aus) können nicht wahr sein, es sei denn, Sie haben Code, der dieses isolierte Snippet zweimal aufruft. Auch das war nicht die richtige Art, SQL schon lange zu erstellen. Verwenden Sie SQL-Parameter. Bitte lesen Sie [fragen] und nehmen Sie die [Tour] – Plutonix

+0

Sie fragen wahrscheinlich die falsche Frage [** Was ist das XY-Problem? **] (http://meta.stackexchange.com/questions/66377/what-is- Das-xy-Problem) –

Antwort

1

Normalerweise tun Sie nicht UPDATE die Pk einer Tabelle. In Ihrem Formular sollte ID nur gelesen werden. Und wenn jemand einen anderen Wert ändern, verwenden Sie die ID zu finden, welche Zeile zu UPDATE

variable = "UPDATE Member " & 
      "SET Forename = '" & Form3.tbfn.Text & "' " 
      "WHERE MemberID = '" & Form3.tbid.Text & "' 

Und Sie brauchen paramethers zu verwenden, andere weise sind Sie anfällig für SQL-Injection

+0

Making upd wo memberId = was auch immer behebt das Problem, aber wie würde ich in der Lage sein, zu memberID zu bearbeiten? – ItsSimplyEddie

+0

Wie ich sage, sollten Sie 'MemberID' in einer Tabelle' Mitglieder' nicht aktualisieren Sie machen wahrscheinlich etwas falsch. Vielleicht versuchen Sie zu teilen und Beispiele dafür, was Sie brauchen und was Ihr Ergebnis sein sollte. Vielleicht ein Bild von deiner Form. –

+0

Hallo zusammen, ich habe den Code aktualisiert und erhalte einen weiteren Fehler. – ItsSimplyEddie

0

Ich gehe davon aus, dass Ihr Abfrage soll das Feld Vorname des Mitglieds mit einer bestimmten ID ändern.

In diesem Fall sollten Sie Ihre Abfrage wie diese

UPDATE Member SET Forename = '" & Form3.tbfn.Text & "' where MemberID = '" & Form3.tbid.Text & "' 
Verwandte Themen