比如我們在SQL Server中的表中定義一個欄位為timestamp型別的欄位ts,這個欄位的值不需要我們進行控制的。
在Insert與Update時,資料庫會自己進行ts值的更新,因此我們只要在Update時使用:
Update xxx where key=@key and ts=@ts 就可以了,根本不用考慮ts裡的值更新。
Delete時也最好進行一下判斷,用這種方式是可以控制資料併發操作的。
只需要在Update與Delete時,判斷"影響條數"就可以知道更新是否成功。
這一點我想非常方便,但不是所有的資料庫都支援timestampr的,如在Access裡沒有timestamp欄位,我也不知道其他的資料庫是否都有類似的timestamp型別,不管怎麼樣,我覺得我們不能完全信賴於資料庫的控制,而應該採用自設的控制機制,這樣可以適應系統的資料庫移值,下面我就介紹一下,在.NET下如何實現,自設的時間戳控制。
我們也同樣建一個欄位ts,定義為Varchar,長度在20以上即可,而且不允許為null,這樣比較合適。
我們應該採用什麼機制來生成隨時的或者說不可能會產生一樣的值,我推薦的是DateTime.Now.Ticks,這是一個12位的數字,由於在Update等更新時,資料庫會自動進行鎖定,所以不可能會在同一時間會有兩個一樣的操作執行,因此這就可以避免Ticks產生相同的值了。
或者也可以採用Guid值,也可以產生唯一值,但我覺得Guid值太大,可能會影響效率。
那好,在我們Insert時:Insert xxxx ts="221283747584" where key="1"
比如我們在SQL Server中的表中定義一個欄位為timestamp型別的欄位ts,這個欄位的值不需要我們進行控制的。
在Insert與Update時,資料庫會自己進行ts值的更新,因此我們只要在Update時使用:
Update xxx where key=@key and ts=@ts 就可以了,根本不用考慮ts裡的值更新。
Delete時也最好進行一下判斷,用這種方式是可以控制資料併發操作的。
只需要在Update與Delete時,判斷"影響條數"就可以知道更新是否成功。
這一點我想非常方便,但不是所有的資料庫都支援timestampr的,如在Access裡沒有timestamp欄位,我也不知道其他的資料庫是否都有類似的timestamp型別,不管怎麼樣,我覺得我們不能完全信賴於資料庫的控制,而應該採用自設的控制機制,這樣可以適應系統的資料庫移值,下面我就介紹一下,在.NET下如何實現,自設的時間戳控制。
我們也同樣建一個欄位ts,定義為Varchar,長度在20以上即可,而且不允許為null,這樣比較合適。
我們應該採用什麼機制來生成隨時的或者說不可能會產生一樣的值,我推薦的是DateTime.Now.Ticks,這是一個12位的數字,由於在Update等更新時,資料庫會自動進行鎖定,所以不可能會在同一時間會有兩個一樣的操作執行,因此這就可以避免Ticks產生相同的值了。
或者也可以採用Guid值,也可以產生唯一值,但我覺得Guid值太大,可能會影響效率。
那好,在我們Insert時:Insert xxxx ts="221283747584" where key="1"