2017-03-31 22 views
1

我有創建事務的.NET代碼,在此事務中,它執行插入/更新,然後進行驗證。如果驗證失敗,則會引發異常以回滾更改。是否有可能讀取事務中一行的前一個狀態?

我需要添加一個驗證規則到這個VB.NET代碼,需要檢查一個行的當前狀態和以前的狀態(即:插入/更新之前的狀態)。基本上我的驗證規則允許從A-> B但不是B-> A的狀態轉換。

如何查詢當前事務之外的行的狀態?換句話說,我可以在插入/更新之前查詢行的狀態嗎?

+2

聽起來像你想要一個觸發器,它可以做到這一點。 – pmbAustin

+1

爲什麼不直接查詢當前狀態(選擇行),只有在驗證成功時才進行驗證和更新/插入?觸發器還可以防止行被插入/更新(如pmbAustin所述),但是它會給你更多/更容易的控制來執行代碼中的驗證(例如,向用戶顯示消息,拋出異常等等)。查詢事務之外的當前狀態並不是必需的。 – IngoB

+1

如果您使用不同的SqlConnection查詢相同的數據,您會看到數據處於事務更改之前的狀態。那是你要的嗎? – FLICKER

回答

0

你也可以用返回值創建一個存儲過程。在存儲過程中,您應該首先選擇要更新的行,分配您想要返回的變量,繼續更新(您也可以在此驗證),然後返回如下所示的賦值變量:

DECLARE @MyTableVar table(Name varchar(50),Age int); 
DECLARE @Name, 
     @Age 
BEGIN 
    SET @Name = (SELECT Name from YourTable WHERE ID=1) 
    SET @Age = (SELECT Age from YourTable WHERE ID=1) 

    -- Here goes your update statement.. 

END 

RETURN @MyTableVar 
+0

你的建議是有效的,但這個解決方案不適用於我的應用程序的當前體系結構。我已經提到過代碼是如何在上面的另一個評論中組織的。謝謝 – burnt1ce

相關問題