2016-03-21 8 views
-1

Ich versuche, alle Datensätze aus einer SQL-Tabelle in VB.net zu entfernen. Mein Code dafür ist:Löschen von Elementen aus SQL-Tabelle in VB.net

Dim SQL As String = "DELETE FROM MTable" 
    Using CN As New OleDb.OleDbConnection(AddPage.DBConnect) 
     CN.Open() 
     Dim DBcmd As New OleDb.OleDbCommand(SQL, CN) 
     DBcmd.ExecuteNonQuery() 
     CN.Close() 
    End Using 

    'SQLDataset.Tables("Mtable").Clear() 

    MtableTA.Update(SQLDataset) 

    SQL = "DELETE FROM ITable" 
    Using CN As New OleDb.OleDbConnection(AddPage.DBConnect) 
     CN.Open() 
     Dim DBcmd As New OleDb.OleDbCommand(SQL, CN) 
     DBcmd.ExecuteNonQuery() 
     CN.Close() 
    End Using 

    ' SQLDataset.Tables("ITable").Clear() 

    ITableTA.Update(SQLDataset) 

Die Mtable und Itables sind die SQL-Tabellen, während MtableTA und ItableTA sind Tischadapter.

ich am Ende auch einen Fehler bekommen, die

An unhandled exception of type 'System.Data.DBConcurrencyException' occurred in System.Data.dll 
    Additional information: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records. 

Der Abschnitt heißt es, wo diese occurss nicht oben im Code zur Verfügung gestellt, sondern ist ein Aufruf an MtableTA.update (SQLDataset). Jede Hilfe würde sehr geschätzt werden. Ich verwende auch OLEDB, wenn das hilft.

+0

Sie wahrscheinlich 'ExecuteNonQuery verwenden müssen, synchronisieren()' statt 'Update' da Sie nicht aktualisieren, sondern löschen. –

+0

FYI MySQL ist nicht Zugriff – Plutonix

+0

Nicht sicher über MySQL, aber Abschneiden Tabelle ist eine bessere Option für SQL Server. Zerstören Sie alle Tabellenadapter, bevor Sie sie abschneiden und später neu erstellen. – rheitzman

Antwort

1

Sie haben die Zeilen direkt gelöscht, indem Sie die TableAdapter-Methoden umgehen. Daher ist es sehr wahrscheinlich, dass beim Aufruf des Updates einige Konflikte mit Daten auf dem TableAdapter auftreten und nicht mehr in der Datenbank verfügbar sind.
Nachdem die Zeilen direkt über das Entfernen OleDbCommand.ExecuteNonQuery Sie einfach die Tableadapters aktualisieren sollten sie mit der realen Situation auf einem physischen Datenbanktabelle

SQLDataset.Tables("ITable").Clear() 
ITableTA.Adapter.Fill(SQLDataSet.ITable) 
Verwandte Themen