2017-05-11 29 views
0

我在ASP.NET中創建了一個使用登錄頁面創建的頁面。我已經選擇了在登錄後激活一些東西。該值在SQL數據庫中默認設置爲「False」。當用戶點擊激活按鈕時,使用C#中的查詢將此列更新爲「True」。使用C自動更新1小時後的SQL數據記錄

我的問題是,在將值更新爲「True」後,1小時後,即使用戶已登錄或不登錄,此列也應自動更新爲「False」。我如何使用C#和SQL來做到這一點?

+0

您是否正在實施類似於會話過期時間的事情,可以通過Web服務器自身進行配置? –

+0

其實我正在做一個機票預訂申請。用戶將提出預訂機票的請求。管理員將登錄並可以查看所有請求。管理員將點擊激活一個特定的請求,這將保持激活一個小時。因此,在這1小時內,管理員必須預訂機票並上傳機票詳情。如果1小時過去,則激活的請求將再次變爲假。 – Mano

回答

3

最簡單的解決方案是將數據類型更改爲datetime,並將其值設置爲上次用戶單擊激活按鈕時的值。那麼你以後不需要自動更新它,你只需要檢查它的值是否在最後一小時內。

+0

但我不想檢查時間並更新它。爲此,我需要一個我應該觸發的事件嗎?我想自動更新SQL數據。就像在啓動時設置一個程序或其他東西一樣。然後1小時後它會自動運行 – Mano

+1

是的,我明白了。但是你要問的是如何實施一開始就不對的解決方案。你必須舉起一面旗子並保持一小時。現在有幾種方法可以實現,幾乎所有這些方法都需要保存特定標誌提出時的日期和時間。我所建議的只是使用這個日期和時間,並且不需要擔心將標誌放下。這就是爲什麼這是最簡單的解決方案。查看庫馬爾的答案,看看我的意思。 –

1

alter table來添加一個名爲ActiveDate日期時間

每當列是真的還是假的多個列,只需將當前時間ActiveDate

現在創建一個日程安排。 我的例子包括每1小時運行一次的窗口標記

在控制檯應用程序中創建一個程序,您只需調用您的proc。

這個過程使所有的錯誤。

將此控制檯轉換爲exe並附加到Window Schedular。

+0

我認爲調度程序應該每分鐘運行一次。如果您在13:15激活,您需要在14:15而非14:00的超時時間。 –

+2

@ MarkusDeibel,對不起,我忘了這種情況。每分鐘運行調度程序=繼續運行調度程序。那麼我想我會和Zohar Peled解決方案一起去。 – KumarHarsh

0

只需按照以下步驟Here 你只需要更改查詢根據您的需要,並每隔1小時

設定的日程,或者您也可以更新創建觸發器,並添加該代碼一小時

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

正如我在下面提到的,將時間表設置爲一小時不會產生一小時所需的超時時間。根據用戶何時點擊激活,它會在1s和59:59之間給出時間。根據所需的粒度,您需要每分鐘或每秒運行一次。 –

+0

@MarkusDeibel我已添加另一個鏈接,你可以關注這一個 –

+0

你添加的鏈接指向MySQL的答案,而OP引用SQL-Server。所以這對解決方案沒有多大幫助。 –