# SQL Server Conpact Edition - löschen mehrerer Datensätze



## StefanK (15 Dezember 2011)

Hi,

ich erstelle eine Anwendung mit VB.NET 2010 Framework 4 und einer SQL Server Conpact Edition 3.5 Datenbank.

Die Felder einer Tabelle sind u.a.:
ID
Datum
Seriennummer
...

Der Zugriff erfolgt mit LINQ_TO_SQL.

Nun möchte ich alle Datensätze des gleichen Datums löschen.
Ein einzelner Datensatz lässt sich so löschen:


```
' get the data context
        Dim dc As New Db_Matrix()

        ' find the customer with a matching Date ID
        Dim matchedDate = (From c In dc.GetTable(Of Parts)() _
                               Where c.Dt = DateID _
                               Select c).SingleOrDefault()

        Try
            ' delete the matching Date
            dc.Parts.DeleteOnSubmit(matchedDate)
            dc.SubmitChanges()

        Catch ex As Exception
            Throw ex
        End Try
```

Allerdings nur wenn die Abfrage lediglich einen Datensatz findet.

"removeall" scheint es in CE nicht zu geben...

Danke im voraus, Gruß
Stefan


----------



## snej (20 Dezember 2011)

Hi,

schau mal hier wirds mit einer foreach-Schleife gemacht:
http://msdn.microsoft.com/de-de/library/bb386925.aspx

Gruß jens


----------



## StefanK (22 Dezember 2011)

Hi,
danke für deine Antwort,

ich habe es jetzt in eine Schleife gepackt. Das löschen von ca. 20.000 Datensätzen dauert allerdings so lange, das ich den Löschvorgang in einen Backgroundworker gepackt habe, damit es den Hauptprozess nicht stört und ich während des löschens noch Datensätze einfügen kann.

Gruß


----------



## rudl (16 Januar 2012)

Wenn du eine Anwendung in VB.Net schreibst, wirst du wohl SQL-Statements abschicken können. Probiers einfach mit DELETE FROM Table WHERE DATUM=Datum, Wobei Table der Tabellenname und Datum das gewünschte Datum ist. 20'000 Datensätze mit einer Foreach Schlaufe aus einer SQL Datenbank zu löschen ist wie in einen neuen Ferrari einen 2CV Motor einzubauen.


----------



## StefanK (16 Januar 2012)

Danke für deine Antwort,

hatte das Projekt zwar abgeschlossen, aber dein Post hat mich nochmal motiviert. Ich hatte es früher schon einmal getestet, mehrere Datensätze zu löschen, habe aber mit 'DeleteAllOnSubmit' immer einen Syntaxfehler bekommen. Nun habe ich das:


```
Public Shared Sub DeletePartsByDate2(ByVal DateID As String)

    Dim dbContext As New Db_Matrix()
    Dim query = From p In dbContext.Parts
        Where p.Dt = DateID
        Select p
    Try
        dbContext.Parts.DeleteAllOnSubmit(query)
        dbContext.SubmitChanges()
    Catch ex As Exception
        Throw ex
    End Try

End Sub
```

testweise implementiert; läuft..!!


----------

