我正在寫將在按計劃運行,定期掃描在SQL Server數據庫中的記錄,並檢查更改這些記錄的過程。不幸的是,這個數據庫中的記錄沒有以任何方式進行版本化/時間戳記,我不能更改模式,因爲它不是我的數據庫。沒有比較每一個領域我不知道如何檢查,看看是否有實際發生的變化。如何判斷數據庫記錄是否已更改?
現在,我使用所有的數據訪問實體框架,但如果需要,我可以切換到直接查詢。是否有捷徑可尋?
編輯:我需要一種方法來檢查是否有改變每一個人的記錄,而不是一個數據庫/表作爲一個整體。
我正在寫將在按計劃運行,定期掃描在SQL Server數據庫中的記錄,並檢查更改這些記錄的過程。不幸的是,這個數據庫中的記錄沒有以任何方式進行版本化/時間戳記,我不能更改模式,因爲它不是我的數據庫。沒有比較每一個領域我不知道如何檢查,看看是否有實際發生的變化。如何判斷數據庫記錄是否已更改?
現在,我使用所有的數據訪問實體框架,但如果需要,我可以切換到直接查詢。是否有捷徑可尋?
編輯:我需要一種方法來檢查是否有改變每一個人的記錄,而不是一個數據庫/表作爲一個整體。
我不認爲檢查每條記錄可以爲大型數據庫的工作(它可以永遠走)
但是你可以計算哈希的每一行,並將其存儲在您的應用程序的數據庫。然後在每次運行中重新計算哈希,並與應用程序數據庫中的內容進行比較。
而且我知道你無法改變的模式,但也許你可以添加觸發器來監控dataabse將登錄的變化?
另一種選擇可能是設置複製並檢測數據庫中接收復制數據(但我不得不承認我從來沒有配置複製,並且我可能對其工作原理錯誤)的更改(使用上述觸發器)。
不幸的是,觸發器也不是一個選項;數據庫管理員已經不滿第三方直接訪問他們的數據庫。他們絕對不會爲我們改變任何事情。我知道這並不理想,但這是我堅持的。幸運的是,我正在使用的表格只有幾千條記錄,所以我認爲散列是一個很好的選擇。有沒有辦法與實體框架做到這一點,或者我將不得不做一個直接的查詢? – jebar8
我不會爲此使用EntityFramework,因爲這隻會增加開銷並且不會給你任何東西。去直接查詢。爲了速度,我會使用SqlDataReader(不是DataTables)。另外,爲了用EF查詢db,你必須爲數據庫生成代碼模型,並在數據庫每次改變時重新生成數據庫(如果你現在改變了數據庫的話)。使用直接查詢數據庫可以改變,你不必改變你的代碼(SELECT *) –
如果您使用SQL Server 2008或更高,則可以利用任意更改數據捕獲或更改跟蹤。這是a link to the MSDN documentation。
你會怎樣比較當前版本檢測改變? – NoChance
@EmmadKareem我將不得不有第二個存儲版本信息的數據庫。因此,如果我使用Peri下面建議的散列方法,第二個數據庫將存儲每條記錄的散列值。 – jebar8