2017-05-11 5 views
0

Ich habe eine Seite in ASP.NET mit einer Login-Seite erstellt. Ich habe eine Option zum Aktivieren von etwas nach der Anmeldung gemacht. Dieser Wert ist standardmäßig auf "False" in der SQL-Datenbank gesetzt. Wenn der Benutzer auf Aktivieren klickt, wird diese Spalte mit einer Abfrage in C# auf "True" aktualisiert.Automatisches Update der SQL-Daten nach 1 Stunde mit C#

Mein Problem ist, dass nach dem Aktualisieren des Wertes auf "True", nach 1 Stunde diese Spalte automatisch als "False" aktualisiert werden soll, auch wenn der Benutzer angemeldet ist oder nicht. Wie kann ich das mit C# und SQL machen?

+0

Implementieren Sie etwas ähnlich wie Session-Ablaufzeit, die vom Webserver selbst konfiguriert werden kann? –

+0

Eigentlich mache ich eine Ticketbuchungsanwendung. Ein Benutzer wird eine Anfrage stellen, um ein Ticket zu buchen. Der Administrator wird sich einloggen und kann alle Anfragen einsehen. Der Administrator wird für eine bestimmte Anfrage auf "Aktivieren" klicken und diese bleibt eine Stunde lang aktiviert. Also muss der Admin innerhalb dieser Stunde ein Ticket buchen und die Ticketdetails hochladen. Wenn 1 Stunde verstrichen ist, wird die aktivierte Anfrage wieder falsch. – Mano

Antwort

3

Die einfachste Lösung wäre, den Datentyp in datetime zu ändern und den Wert auf den Zeitpunkt einzustellen, zu dem der Benutzer zuletzt auf die Schaltfläche activate geklickt hat. Dann müssen Sie es später nicht automatisch aktualisieren, Sie müssen nur prüfen, ob der Wert innerhalb der letzten Stunde liegt.

+0

Aber ich möchte nicht die Zeit überprüfen und aktualisieren. Dafür würde ich ein Ereignis brauchen, das ich richtig auslösen sollte? Ich möchte die SQL-Daten automatisch aktualisieren. Wie zum Beispiel während der Aktivierung eine Prozedur oder etwas einrichten. Dann nach 1 Stunde wird es automatisch laufen – Mano

+1

Ja, ich habe das. Was Sie jedoch fragen, ist, wie Sie eine Lösung implementieren, die zunächst falsch ist. Sie müssen eine Flagge heben und eine Stunde lang weiterspielen. Jetzt gibt es mehrere Möglichkeiten, dies zu tun, und fast alle erfordern das Speichern des Datums und der Uhrzeit, wann dieses bestimmte Flag ausgelöst wurde. Ich schlage vor, nur dieses Datum und diese Uhrzeit zu verwenden, und erspart Ihnen die Notwendigkeit, sich darüber Gedanken zu machen, die Flagge zurückzusetzen. Deshalb ist es die einfachste Lösung. Schau dir Kumars Antwort an, um zu sehen, was ich meine. –

1

Alter Tabelle eine Spalte mehr ActiveDate Datetime

genannt hinzuzufügen, wenn diese Spalte wahr oder falsch ist, einfach die aktuelle Zeit in ActiveDate gesetzt

nun einen Scheduler erstellen. Mein Beispiel besteht aus Fenster-Schedular, die alle 1 Stunde ausgeführt werden

Machen Sie ein Programm in der Konsolenanwendung, die Sie einfach Ihre proc aufrufen würden.

Diese Proc machen alle falsch.

Konvertieren Sie diese Konsole in exe und hängen Sie sie an Windows Schedular an.

+0

Ich denke, der Scheduler sollte jede Minute laufen. Wenn Sie um 13:15 aktiviert haben wollen Sie die Timeout um 14:15 nicht 14:00 nehme ich an. –

+2

@ MarkusDeibel, sorry, ich habe dieses Szenario vergessen. Scheduler jede Minute laufen lassen = den Scheduler weiter laufen lassen. Dann denke ich, dass ich mit Zohar Peled Lösung gehen werde. – KumarHarsh

0

Folgen Sie einfach den Schritten Here Sie müssen nur die Abfrage ändern, um Ihren Bedarf nach und stellen Sie den Zeitplan bei jeder 1 Stunde

oder Sie können Trigger auf Update erstellen und diesen Code für die Verzögerung von einer Stunde hinzufügen

DECLARE @MyDateTime DATETIME 
SET @MyDateTime = DATEADD(HOUR,1,GETDATE()) 
WAITFOR TIME @MyDateTime 
SELECT GETDATE() CurrentTime 
+0

Wie ich bereits erwähnt habe, bringt das Einstellen des Zeitplans auf eine Stunde nicht die erforderliche Zeitüberschreitung von einer Stunde. Es wird eine Zeit zwischen 1s und 59:59 geben, abhängig davon, wann der Benutzer auf activate klickt. Sie müssen es je nach erforderlicher Granularität jede Minute oder Sekunde ausführen. –

+0

@MarkusDeibel Ich habe einen weiteren Link hinzugefügt, dem Sie folgen können –

+0

Der von Ihnen hinzugefügte Link verweist auf eine Antwort für MySQL, während der OP auf SQL-Server verweist. Das wird also nicht viel in der Lösung helfen. –

Verwandte Themen