2017-01-21 6 views
-1

Ich versuche, eine Zeile einer Datenbanktabelle zu aktualisieren und zu speichern. Ich habe eine Version dieses Codes verwendet, um ein GridView zu füllen, und es funktioniert, also gehe ich davon aus, dass es etwas mit meinem SQL-Statement zu tun hat; Ich bekomme keinen Fehler, die Tabelle wird nicht aktualisiert. Bei dem Ereignis zum Laden der Seite werden die Textfelder mit den Informationen der Zeile gefüllt, und ich habe eine globale Variable namens 'temp', die den Titel der Zeile speichert, damit ich sie im Click-Ereignis der Schaltfläche verwenden kann. Der Fehler, den ich erhalte, besagt, dass ich keinen Wert für einen meiner erforderlichen Parameter angegeben habe. Die Registerkarte Meine Locals im Debugger zeigt an, dass jede Variable einen Wert hat, obwohl die Variable, die ich zu aktualisieren versuche, nicht die neuen Daten, sondern immer noch die alten Daten ist. Ich habe mehrere Beispiele angeschaut und kann das Problem nicht finden. Danke für jede Hilfe.Aktualisieren der Zeile in der Datenbank mit vb.net

Protected Sub btnSave_Click(sender As Object, e As EventArgs) 

    Dim strTitle As String = txtTitle.Text 
    Dim strConsole As String = txtConsole.Text 
    Dim strYear As String= txtYear.Text 
    Dim strPurchase As String = calDate.SelectedDate.ToString 

    Using con As OleDbConnection = New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;" + "DATA SOURCE=" + Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "App_Data", "db1.accdb")) 
     Dim cmd As OleDbCommand = New OleDbCommand() 

     cmd.CommandText = Convert.ToString("UPDATE Video_Games SET Title = @title, Console = @Console, Year_Released = @Year_Released, Purchase = @Purchase WHERE Title=" & temp) 
     cmd.Connection = con 

     cmd.Parameters.AddWithValue("@Title", strTitle) 
     cmd.Parameters.AddWithValue("@Console", strConsole) 
     cmd.Parameters.AddWithValue("@Year_Released", strYear) 
     cmd.Parameters.AddWithValue("@Purchase", strPurchase) 

     con.Open() 

     cmd.ExecuteNonQuery() 
     con.Close() 
    End Using 

    Server.Transfer("Form.aspx", True) 
End Sub 

Ich habe auch versucht, die haben meine wo Aussage wie: WHERE Title='" & temp & "'") Obwohl dies funktioniert auch nicht.

This is the details of the Error message

+0

'Dim Zeilen = cmd.ExecuteNonQuery()' Wenn das Ergebnis ungleich Null ist, wird die DB aktualisiert. Daten gespeichert als Zeichenfolge? Schlechte Idee. – Plutonix

+0

Der Titel wird sowohl als Bedingung als auch als Sollwert verwendet. Es gibt keinen zu aktualisierenden Datensatz, wenn Sie einen neuen Titel übergeben. – Steve

+0

Auf meiner Seite laden Ereignis füllen ich die Textfelder mit den Zeileninformationen. Ich habe eine globale Variable hinzugefügt, die den Titel der Zeile speichert, damit ich sie für die SQL-Anweisung meiner Schaltfläche verwenden kann. Dies funktioniert und speichern Sie den Titel auf die temporäre Variable. Das Ende der SQL-Anweisung lautet jetzt "WHERE Title =" & temp ". Dies gibt mir jedoch einen Fehler, der besagt, dass ich keinen Wert für einen meiner erforderlichen Parameter angegeben habe. Die Registerkarte Meine Locals im Debugger zeigt an, dass jede Variable einen Wert hat, außer dem, den ich zu aktualisieren versuche, sind nicht die neuen Daten, sondern immer noch die alten Daten. –

Antwort

0

Vielen Dank für Ihre Hilfe, Dies ist so eine wunderbare Gemeinschaft.

Das Problem, das ich herausgefunden habe, hat nicht einmal mit dem Click-Ereignis der Schaltfläche zu tun, es hatte mit dem Seitenladeereignis zu tun. Da beim Laden der Seite die Informationen der Zeile geladen und in die Textfelder gefüllt werden, wird beim Klicken auf die Schaltfläche zum Aktualisieren der Felder das Ereignis zum Laden der Seite erneut ausgelöst und die alten Informationen in Felder geladen, wobei im Wesentlichen die alten anstelle der neuen Informationen gespeichert werden. Meine Lösung bestand darin, eine If Not IsPostBack Then-Anweisung zu erstellen, die meinen Code zum Laden der Seite einkapselt. Daher wird der Code nicht gespeichert, wenn die Taste gedrückt wird. Ein anderes dies, ich brauchte die Temp Variable nicht, WHERE Title='" + strTitle + "'" funktioniert. Hoffentlich hilft dies anderen Leuten bei einem ähnlichen Problem stecken zu bleiben!

-2

Mit Daten in einer where-Klausel ist immer ify wie sie Punktzahlen schweben und kann nicht in gleichem Maße entsprechen. Ich würde versuchen, sie zu runden oder vor dem Vergleich in Zeichenfolgen umzuwandeln, z. etwas in dieser Richtung:

UPDATE Video_Games SET Title = @title, Console = @Console, Year_Released = @Year_Released, Format(Purchase, ""m/d/yyyy"") = Format(@Purchase, ""m/d/yyyy"") WHERE Title = @Title 
+0

Ich habe dies versucht und ich bekomme einen Fehler auf den Update-Befehl. Ich habe die Variable einfach in einen String geändert: Dim strPurchase As String = calDate.SelectedDate.ToString, um es einfacher zu machen. Vielen Dank für Ihre Eingabe. Obwohl die Datenbank immer noch nicht aktualisiert wird. –

0

Ich änderte Sie Commandtext wie unten und erstellt wie Ihrem eine leere Datenbank mit einer Tabelle gesehen benannt und das Update arbeitete

cmd.CommandText = "UPDATE Video_Games SET Title = @title, Console = @Console, Year_Released = @Year_Released, Purchase = @Purchase WHERE Title='" & temp & "'" 

Ich habe meine Variable für Title = super Mario Bros und dann die Temperaturvariable zu Wario World. Ich hatte eine Aufzeichnung in meiner Datenbank mit dem Titel von Wario World, und das Ausführen des Updates änderte den Titel zu Super Mario Bros.

Überprüfen Sie, ob Ihre Temp-Variable sich von Ihrer @title-Variable unterscheidet. Überprüfen Sie auch, dass Sie den Datensatz in der Tabelle für Ihre temporäre Variable haben

Verwandte Themen