2012-07-12 41 views
0

我想阻止人們不斷同步/更新數據庫中的項目,因爲這可能會導致潛在問題。我有一次存儲在數據庫中的最後一次同步/更新。我需要做的是禁止用戶啓動另一次更新/同步,直到自上次更新/同步以來已過去15分鐘。檢查存儲在數據庫中的時間,然後確保在運行更新任務前15分鐘後

我該如何去做這件事?

更新:出於某種原因,我得到錯誤「一個新的表達式需要(),[]或{}在DateTime lastUpdate上輸入」之後。任何想法,爲什麼這可能是?

DataDataContext dc = new DataDataContext(); 

     DateTime lastUpdate = from t in dc.Settings 
           where t.id == 1 
           select t.lastSync; 


     if ((DateTime.Now - lastUpdate).TotalMinutes >= 15) 
     { 

     } 
     else { } 

更新:排序,我錯過了(); datacontext的! facepalm

最終更新:所有固定和工作!非常感謝您的幫助,對於那些認爲這有「腥氣」或「不好」的人,那麼這就是我所做的!

DateTime lastUpdate = (from t in dc.Settings 
           where t.id == 1 
           select t.lastSync).Single(); 


     if ((DateTime.Now - lastUpdate).TotalMinutes >= 15) 
     { 
      syncbuttons.Visible = false; 
     } 
     else { syncbuttons.Visible = true; } 

現在請解釋一下我想要做什麼這麼懷疑嗎?阻止用戶敲擊數據庫?如果我有30個用戶嘗試更新/同步,該怎麼辦?不會那麼好!

+1

你確定這不是一種蠻力修復嗎?它聞起來對我來說有點不好... – Icarus 2012-07-12 15:10:35

+0

對於我正在開發的一個網絡應用程序來說它沒有它。我想知道的是如何檢查時間,在其上添加15分鐘,然後啓用同步按鈕以允許用戶更新/同步。我不確定這將是一個蠻力修復?這些都是其中之一。 – thatuxguy 2012-07-12 15:14:28

+0

所以你要讓最終用戶加載一個網頁並改變它,但告訴他們他們不能保存他們改變的數據,直到時間X?我不認爲你應該在服務器端做到這一點,你應該在客戶端做到這一點(JavaScript)。但是我同意@Icarus:這裏有一些有趣的東西。 – jcollum 2012-07-12 16:05:03

回答

0
DateTime lastUpdate = ...; // Retrieve from DB 
TimeSpan elapsed = DateTime.Now - lastUpdate; 
if (elapsed.TotalMinutes >= 15) 
{ 
} 

,或者在一個行:

if ((DateTime.Now - lastUpdate).TotalMinutes >= 15) 
+0

DateTime lastUpdate =從dc中設置t.Settings select t.lastSync;它是否正確? – thatuxguy 2012-07-12 15:30:33

+0

我不確定。我沒有意識到你也不確定如何從數據庫中讀取值。這取決於您的數據庫架構。在你的例子中,我不知道'dc'是什麼。我對LINQ也不太熟悉。它當然看起來是正確的。你試過了嗎?您是否熟悉如何使用調試器來跟蹤代碼並檢查變量值? – 2012-07-12 15:36:43

+0

是的,即使字段是日期時間字段,我只是收到有關轉換爲DateTime的錯誤! dc是我的datacontext,它建立了我的數據庫連接。 – thatuxguy 2012-07-12 15:40:27

1
if (lastUpdateTime.AddMinutes(15)<DateTime.Now) 
{ 
    // do update 
} 
+0

我猜測lastUpdateTime將是我從數據庫調用的? – thatuxguy 2012-07-12 15:18:29

+0

是............ – paul 2012-07-12 15:26:37

+0

我如何獲取數據庫的日期?我似乎有問題:S'DateTime lastUpdate =從t in dc.Settings 其中t.id == 1 select t.lastSync;'正在返回「新的表達式需要(),[]或{}之後鍵入「 – thatuxguy 2012-07-12 15:56:37

1

導致該錯誤是你的LINQ表達式返回(IQuerryable)collecton的問題,而是你正試圖指派/投它到DateTime。

使用

 DateTime lastUpdate = (from t in dc.Settings 
        where t.id == 1 
        select t.lastSync).Single(); 

關於Db的同步嘗試;我不是數據庫專家,但我不認爲應該在接近重負載的地方考慮30個連接。如果是這樣,那麼如果優化數據庫和事務,則會更好。

禁用同步按鈕不會阻止用戶點擊重新加載按鈕,這反過來可能會產生比定製的定製刷新過程更多的流量。

即使你解決了這個問題,如果你的用戶基數增加到一秒鐘沒有人敲擊同步按鈕的時候,你會得到30個連接。

所以我的建議是,你回去看看你是否可以最小化同步的影響。一種方法可能是在您要提取的記錄上添加時間戳。比索引該列,所以它將快速查找,並有數據庫檢查是否有任何行比用戶las同步更新。

只是使您的應用程序無響應或滯後(在用戶眼中)不應被視爲可行的解決方案。

至少我是這樣解決問題的。

+0

謝謝:)工作治療 – thatuxguy 2012-07-12 16:08:21

+0

@thatuxguy這很好,我也更新了我的答案,爲什麼防止更新可能是一個壞主意。 – JonC 2012-07-12 16:49:32

+0

好點,我會考慮他們,因爲我前進:) – thatuxguy 2012-07-13 08:01:40

相關問題