2010-11-25 6 views
2

Ich arbeite gerade mit einer Konsolenanwendung (C#). Es werden Dateien aus einer Datenbank abgerufen und in den entsprechenden Ordnern auf dem Laufwerk C auf einem lokalen Computer gespeichert.Datum/Uhrzeit des letzten Anwendungslaufs speichern

Im Moment zieht jedes Mal, wenn ich die Konsolenanwendung starte, ALLE Dateien aus der Datenbank.

Was ich gerne tun könnte, ist jedes Mal, wenn ich es ausführe, zieht es nur die Dateien, die seit der letzten Ausführung der Konsolenanwendung übermittelt wurden. Derzeit ist dies die linq-Anweisung, die die Dateien aus der Datenbank abruft.

var titleObjects = ctn.Titles.Where(t => !t.Deleted && t.SubmissionState == 2 &&(t.Approved.HasValue && t.Approved.Value)).Select(t => t); 

Im Idealfall würde ich so etwas wie die folgende mag, wo das Datum und die Uhrzeit der letzten Ausführung der Anwendung irgendwo gespeichert sind:

var titleObjects = ctn.Titles.Where(t => !t.Deleted && t.SubmissionState == 2 && t.CreatedDate >= LastAppRun && t.CreatedDate <= DateTime.Now && (t.Approved.HasValue && t.Approved.Value)).Select(t => t); 

Ich bin nicht sicher, wie man über das Erreichen dieser gehen . Wenn jemand einen Rat dazu hätte, wäre ich sehr dankbar :)

+0

Wenn Ihre Anwendung startet, erhalten Sie das aktuelle Datum/Uhrzeit und verarbeiten Nachrichten zwischen dem "letzten" Datum/Uhrzeit und dem aktuellen. Bevor die App beendet wird, speichern Sie die aktuelle Zeit als "Letzte" (Sie können die Zeit beispielsweise in JJJJMMTTHHMMSS formatieren und in einer Datei speichern). Um welchen Teil davon bist du dir nicht sicher? – Jon

+0

@Jon, ich bin nur unsicher, was der beste Weg ist, um es ehrlich zu sein. Im Moment (ich habe es oben nicht erwähnt) habe ich die App so eingestellt, dass ich den Nutzer nach dem An und Ab-Datum frage, aber ich möchte nur, dass es ein bisschen nahtloser funktioniert. Ich war mir nur nicht sicher, wie ich das "letzte" Datum/Zeit in der App speichern würde (ohne eine Datenbank zu benutzen) oder ob es sogar möglich war. – 109221793

+2

Optionen, die ich mir vorstellen kann: 1. Ihre eigene Datei an dem Ort Ihrer Wahl auf der Festplatte. 2. 'System.Configuration' 3.' System.IO.IsolatedStorage' 4. Die Registrierung 5. Die Datenbank selbst. – Ani

Antwort

2

Warum nicht einfach eine Tabelle in der Datenbank erstellen und einen Datensatz einfügen, der die letzte Laufzeit enthält. Dann aktualisieren Sie den Wert aus dem Datensatz bei jedem Lauf und aktualisieren Sie es, wenn Sie fertig sind.

Oder Sie könnten einen Datensatz für jeden Lauf einfügen, um zu verfolgen, wann Läufe aufgetreten sind, und den Datensatz mit der maximalen Datumszeit bei jedem Lauf auswählen, um den letzten Lauf zu ermitteln.

+0

Hallo @ andynormancx..yeah Ich dachte daran, dies zu tun, ich wollte nur andere Meinungen zu sehen, was wäre der beste Weg, es zu tun. Danke für Ihre Antwort :) – 109221793

+0

Nun, Ihre einzigen anderen Optionen sind, den Wert lokal in einer Datei oder in der Registrierung zu speichern. Die Datenbank scheint jedoch der beste Ort dafür zu sein. – andynormancx

+0

Ich denke, du hast Recht. Es wäre wahrscheinlich gut, eine Aufzeichnung der Zeiten zu haben, in denen die Anwendung ausgeführt wurde.Danke :) – 109221793

5

Sie können app.settings dafür verwenden. Es ist ein bisschen einfacher, nur einen Wert zu schaffen und seinen Wert als

Properties.Settings.Default.lastRunTime = DateTime.Now; 
Properties.Settings.Default.Save(); 

es viel einfacher ist, wenn Sie die Anwendung mit oder ohne Datenbank verwenden

Sie können die Einstellungen auch verschlüsseln. Google zum Verschlüsseln.

0

Was ist, wenn Ihre Datenbank mehrere Konsolenclients hat? Es sieht so aus, als ob das Speichern von LastAppRun eine clientseitige Aufgabe ist.

Sie können LastAppRun in eine Datei serialisieren und in IsolatedStorageFile speichern.

Andere (hässlicher) Option ist für einen Registrierungsschlüssel gehen.

+0

Mehrere Clients ist leicht mit der Datenbanklösung behandelt. Haben Sie eine Spalte, die eine Kennung für jeden Client enthält und speichern Sie die Kennung für jeden Client in app.config – andynormancx

+0

Hallo Sergey, die Konsole App wird immer nur von einer Person verwendet werden, so gibt es kein Problem mit mehreren Konsolen-Clients. – 109221793

Verwandte Themen