2009-07-19 77 views
0

您好我目前有一個程序,它可以檢索WMI信息並將其存儲到數據庫,然後在一段時間後刪除較舊的記錄。目前,我正在將程序刪除超過10分鐘的記錄,並且在用新信息填充數據庫後每隔2分鐘檢查一次。在另一個每隔兩分鐘運行一次的計時器中,存儲在數據庫中的信息將顯示給用戶,這與顯示在數據庫表中的順序相同。使用LINQ將數據庫記錄添加到表頂部而不是底部

我遇到的問題發生在程序從新數據庫運行10分鐘後刪除記錄時運行,而不是將新記錄添加到它們出現在頂部的數據庫表末尾。它也發生在程序重新打開時,一旦舊數據被刪除,現有數據已經​​填充數據庫。

下面我添加了代碼,顯示了我的數據如何添加到數據庫以及它如何被刪除(這發生在2個獨立的類中)。在此之下,我列出了一些示例輸出數據,以便您能理解我的意思。

基本上我需要一種方法來解決這個問題,因爲數據需要根據DateTime收集的順序顯示,所以如果你能夠發現任何東西,那將是值得讚賞的,如果不是最好的方式來解決這個問題在數據顯示之前對數據進行排序?

DateTime dateTime = DateTime.Now.Subtract(new TimeSpan(0, 0, 10, 0)); 

var result2 = (from b in hddInfo 
       where b.DateTime < dateTime 
       select b).DefaultIfEmpty(); 

foreach (TblHDDInfo record2 in result2) 
{ 
     if (record2 != null) 
     { 
     localDB.TblHDDInfo.DeleteOnSubmit(record2); 
     } 
} 

localDB.SubmitChanges(); 

TblHDDInfo hddInfoAdd = new TblHDDInfo(); 
          hddInfoAdd.DeviceID = deviceID; 
          hddInfoAdd.IpAdd = ipAdd; 
          hddInfoAdd.Size = size; 
          hddInfoAdd.FreeSpace = freeSpace; 
          hddInfoAdd.DateTime = dateTime; 
          localDB.TblHDDInfo.InsertOnSubmit(hddInfoAdd); 

          localDB.SubmitChanges(); 

第1次 硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009十七點27分21秒

硬盤大小:186GB 剩餘空間:157GB 日期時間: 19/07/2009 17時29分26秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009十七點31分31秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17時33分36秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17:35: 41

第二時間 HDD大小:186GB 剩餘空間:157GB 日期時間:19/07/2009十七時37分46秒

HDD大小:186GB 剩餘SPAC E:157GB 日期時間:19/07/2009 17時29分26秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17點31分31秒

硬盤容量:186GB 剩餘空間:157GB 日期時間:19/07/2009 17時33分36秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17時35分41秒

3時間 硬盤容量:186GB 剩餘空間:157GB 日期時間:19/07/2009 17時39分51秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17點37分46秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17時29分26秒

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17:31 :31

硬盤大小:186GB 剩餘空間:157GB 日期時間:19/07/2009 17時33分36秒

回答

3

爲什麼不只是添加一個排序依據b.DateTime你的LINQ查詢?

只是澄清:數據庫的性質無序,插入的位置是不確定的,因爲實際表中的行的位置是一個毫無意義的概念,在您與交互時使用的抽象級別上在你的代碼中對數據庫。您必須對一個或多個字段的數據庫輸出進行排序以應用排序。

+0

乾杯我對C#和LINQ相當陌生,並沒有想到,很抱歉作爲一個n00b – manemawanna 2009-07-19 17:32:30

+0

我們都需要學習一段時間。祝你好運! – JohnFx 2009-07-19 17:34:17

2

因爲沒有數據庫表的「頂部」和「底部」,所以我不是100%確定要實現的目標。但是,這行代碼...

hddInfoAdd.DateTime = dateTime; 

...似乎我錯了。它不應該像......

hddInfoAdd.DateTime = DateTime.Now; 
1

DB理論的中心租戶之一是數據存儲未排序。這個想法是人們可能想要將數據分類的方式有很多種,因此對原始存儲應用特定的排序順序是很浪費的。這只是一個事故/實施細節,DBMS按照它插入的順序顯示未排序的數據(並且我也看到了並非總是如此的情況)。

如果你想要一個特定的數據順序,你應該使用order by子句(和潛在的索引)明確地應用這個請求。

1

SQL中的唯一順序是您使用ORDER BY根據列值強加的順序。

ALL其他明顯的行訂單都是一致的。

如果要控制出現的順序,那麼你必須添加列進行治理,並使用ORDER BY您選擇要實現它。如果你已經有了列(dateTime),那麼你只需要添加ORDER BYs

相關問題