2017-07-05 19 views
0

Ich habe eine Tabelle in meinem Programm, die Informationen über Nachrichten speichert und erkennen möchte, wenn neue Informationen hinzugefügt wurden. Der Grund dafür liegt darin, dass ich die neuen Daten dem Benutzer nur anzeigen möchte, wenn neue Daten vorhanden sind, anstatt ständig alle Zeilen abrufen und anzeigen zu müssen.Ich kann nicht nach geänderten Zeilen in einem Dataset suchen

Die Art, wie ich dies getan habe, war durch die Verwendung der Funktion dataSet.HasChanged(), die das Dataset für alle neuen Zeilen im Wesentlichen überprüfen sollte und eine Funktion namens DataChanged returns dataSet.HasChanged() Wert.

jedoch die Funktion verwende ich immer wieder falsch (auch wenn es Änderungen gibt)

Hier ist die Funktion ...

public bool DataChanged(string Table) 
{ 
    //This is the variable that will be returned 
    bool ChangesMade; 

    //Create the adapter 
    OleDbDataAdapter adapter = new OleDbDataAdapter(Table, connector); 
    //Clear the current data in the dataset 
    dataSet.Clear(); 
    //Open the connection and fill the dataset 
    connector.Open(); 
    adapter.Fill(dataSet, "TableData1"); 
    connector.Close(); 
    return ChangesMade = dataSet.HasChanges(); 
} 

Änderungen aus irgendeinem Grunde nie erkannt und deshalb diese Funktion gibt immer false zurück, auch nachdem ich einen neuen Datensatz zum Datensatz hinzugefügt habe.

Eine alternative Methode, die die in Absatz 1 erläuterte Funktionalität bietet, wäre sehr hilfreich und die Fixierung meiner aktuellen Methode immer mehr.

Antwort

0

Hier ist eine einfache Möglichkeit, dies zu tun.

Stellen Sie sicher, dass für jede Tabelle, für die Sie Änderungen verfolgen möchten, eine Timestamp/Rowversion-Spalte vorhanden ist.

Geben Sie den aktuellen Datenbank-Zeitstempel als Teil Ihrer Datenergebnismenge (in diesem Fall DataSet) an Ihr aufrufendes Programm zurück. Fügen Sie Ihrer Ergebnismenge beispielsweise die folgende Abfrage hinzu.

SELECT @@DBTS; 

Verwendung zurückgegeben diesem Wert das nächste Mal, wenn Sie Ihre Abfrage mit der Option wie folgt ergänzt um die bestehende WHERE-Klausel (n) als angemessen.

... 
AND (@LastRowversionValue IS NULL 
    OR TableName.RowversionColumn > @LastRowversionValue) 
... 

Pass NULL für den @LastRowversionValue das erste Mal die Abfrage lief gestartet, um den Prozess zu bekommen.

Alle Zeilen, die seit dem letzten Abruf der Daten in die Tabelle (n) eingefügt/aktualisiert wurden, haben eine höhere Zeilenversion als die, die Sie bei der letzten Ausführung gespeichert haben.

Verwandte Themen