kurioses Verhalten dataset.table(tableName).rows.count contra Select count(*) From tableName

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Gerbeth.

    kurioses Verhalten dataset.table(tableName).rows.count contra Select count(*) From tableName

    Hallo,

    ich habe ein kurioses Verhalten in meinem Programm festgestellt und komme nicht weiter.

    Bevor ich die einzelnen Tabellen abrufe ermittle ich die Anzahl der Datensätze in den einzelnen Tabellen mit

    'SELECT COUNT(*) FROM TABLE...'.

    Das funktioniert und die Rückgabewerte sind richtig. Ergebnis zum Beispiel = 23486 Zeilen.
    Wenn ich nun während des Datenabrufs der Tabelle mit Hilfe eines 2. Threads den aktuellen Füllstand des Datasets ermittle, werden kurz vor dem Ende des Downloads höhere Werte zurückgegeben als tatsächlich Datensätze vorhanden sind.
    Dazu benutze ich folgendes Vorgehen:

    Ich starte einen separaten Thread der alle 250 Millisekunden folgenden Code ausgewertet:

    intRowAktuell = DataSet.Tables(strTabName).Rows.Count

    Und dieser Code gibt mir kurz vor dem Ende für Rows.Count Werte von 27060 Zeilen zurück. ????

    Kann sich irgendjemand dieses Verhalten erklären?

    Vielen Dank im Voraus
    Christoph
    Hallo,

    es scheint tatsächlich so zu sein, dass zuvor gelöschte Datensätze noch in der Tabelle 'herumgeistern'. Eine spätere Analyse des Datasets mit DataSet.Tables.Rows.Count ergibt wieder eine Anzahl an Datensätzen von 27060.
    Also:
    Datenbank sagt: 23469 Datensätze und nächstes AutoIncrement: 24261 (soweit alles nachvollziehbar)
    SELECT COUNT(*) FROM TABLE sagt 23469 Datensätze (auch gut)
    DataSet.Tables.Rows.Count sagt 27060 Zeilen
    Eine Optimierung der Tabelle ergibt keine Besserung.
    Gibt es eine Möglichkeit, nur die wirklich 'wichtigen' Datensätze abzurufen? Und die gelöchten Datensätze in der Datenbank zu lassen?

    Ich suche weiter...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gerbeth“ ()

    genau lesen: die gelöschten Datensätze sind nicht in der Datenbank, sie sind im Dataset.

    Vermutlich versäumt deine Lade-/Speicher-Funktion, mit Dataset.AcceptChanges die Änderungsverfolgung des Datasets wieder zu bereinigen.
    Die gelöschten Datensätze sind übrigens durchaus wichtig - wie sollte etwa ein DataAdapter Löschungen an die DB senden, wenn darüber im Dataset ühaupt keine Informationen mehr vorliegen?
    @Gerbeth Zur erforschung und Behebung dieses Effekts mach Dir zuerst eine ganz kleine Tabelle, die Du auf einen Blick überschauen kannst.
    Auch dauert das Laden da nicht so lange.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Abend,

    ALLES GUT! Fehler lag in meinem Programmcode. Ich habe 'sinniger Weise' DataAdapter.Fill 2 x aufgerufen... Da brauch man sich nicht wundern.
    Wie sagt meine Frau immer? "Wer lesen kann, hat Vorteile..."
    Danke für Eure Denkanstöße, das hat mir wirklich geholfen!!!