Zeile löschen von der Datenbank mit OLE DB
Habe ich diese Funktion arbeitet nur zur Hälfte berechtigt. Der Teil, der richtig ist, wo kann ich eine Zeile auswählen, die auf das DataGridView, rufen Sie diese Funktion mit einem "Zeile Löschen" - Taste, dann wird das löschen der Zeile aus der DataGridView....Es wird jedoch nicht die Zeile löschen in der Datenbank.
Kann mir jemand helfen mit dem löschen der Zeile aus der DB mithilfe von OleDb?
Function DeleteTableRow()
Dim TaxConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ConfigurationManager.AppSettings("Database")
Dim dbConnection = New OleDbConnection(TaxConnStr)
Try
Dim dbCommand As OleDbCommand = New OleDbCommand
Dim rdr2 As OleDbDataReader
Dim selectedRow = DataGridView1.SelectedRows
dbCommand.CommandText = "DELETE FROM UserCriteria WHERE RowID =" & selectedRow
If dbConnection.State = ConnectionState.Closed Then
dbConnection.Open()
End If
dbCommand.Connection = dbConnection
rdr2 = dbCommand.ExecuteReader
dbCommand.ExecuteNonQuery()
rdr2.Close()
'''Must select entire row to delete
'DataGridView1.Rows.Remove(DataGridView1.Rows(DataGridView1.SelectedCells.Item(0).RowIndex))
'''allows you to select on cell in the row to delete entire row
For Each oneCell As DataGridViewCell In DataGridView1.SelectedCells
If oneCell.Selected Then
DataGridView1.Rows.RemoveAt(oneCell.RowIndex)
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
Finally
dbConnection.Close()
End Try
End Function
InformationsquelleAutor MaylorTaylor | 2013-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
DataGridView.SelectedRows ist eine Sammlung von
DataGridViewRow
Sie nicht verwenden können eine collection als parameter zu löschen, die einen bestimmten und spezifischen Datensatz in der Datenbank-Tabelle. (Haben Sie OPTION STRICT set tot AUS?)Müssen Sie eine Schleife über der Kollektion, Holen Sie sich die richtige
ID
Wert von jeder einzelnen Zeile und verwenden Sie diesen Wert als parameter in der Abfrage löschen.Achten, nicht für die Verwendung der string-Verkettung zum erstellen von sql-Befehlen. Diese Gewohnheit führt zu einem Ganzen kann der Wurm namens Sql-Injection
Natürlich ein OleDbDataReader-ist hier nicht erforderlich. (Nichts gelesen)
Nicht nur ändern Sie den code, um dies zu verdeutlichen. Ich werde über die Antwort
Deine For-Schleife scheint nicht richtig. Ich habe "Für jede selectedRow in Datagridview1.selectedrows" ...
Ja, das stimmt, kopieren,einfügen und übersetzung von C# zu schnell. Behoben
Bekomme immer noch die Fehlermeldung "Spalte mit der ID nicht gefunden werden kann."...aber ich bin starrte auf die DB. Ich sehe eine Spalte namens "ID" in der Benutzerkriterien Tabelle. ..
InformationsquelleAutor Steve
Brauchen Sie nicht ein Leser, um eine Zeile zu löschen. es werden keine Daten zurückgegeben
sollte einfach sein
InformationsquelleAutor Robert Beaubien
Das Problem ist, dass Ihr
DataGridView1.SelectedRows
zurückSelectedRowCollection
(sorry, ich habe die Vermutung das ist ein WinForms-app). Und das geht nicht, bekommen Sie das korrekte Ergebnis, wenn Sie übergeben IhreCommandText
weil Sie wahrscheinlich die ToString() derSelectedRowCollection
anstatt die ID, die Sie nachWas Sie eigentlich tun möchten, ist die Schleife über die collection (wenn der Benutzer ist in der Lage, wählen Sie mehr als eine Zeile), und löschen Sie jede Zeile, die ausgewählt wurde, so etwas wie:
Jeder
selectedRow
im oben genannten werden von diese geben...die hat einCells
Eigenschaft, die Sie zugreifen können, um die ID, die Sie benötigen (ich bin mir nicht sicher welche Zelle es wird in aber Sie sollten in der Lage sein zu sagen, aus deinem code).InformationsquelleAutor nkvu