2012-12-13 66 views
4

我需要使用兩個數據庫函數,其中我需要刪除註釋,然後調用第二個函數,這會降低用戶的分數。如何處理兩個函數之間的數據調用一個接一個

問題: 如果在第二個函數中發生異常,分數不會被扣除,但評論被刪除。

我嘗試在類對象中存儲第一個函數的存儲操作,並且如果在第二個函數中發生異常,將會發生反向操作以將其重寫到數據庫中。有沒有其他辦法可以做到這一點,請給我建議。 在此先感謝

+0

結合到一個功能,以避免額外的處理? – Raptor

+0

在一個函數中,如果執行完第一個查詢之後發生異常,比.... –

回答

2

您需要在同一個事務的範圍內都有數據庫調用。因此,如果您遇到異常,所有將會回滾。

這取決於你如何訪問數據庫,但它可能是這樣的:

using (var Conn = new SqlConnection(_ConnectionString)) 
{ 
    SqlTransaction trans = null; 
    try 
    { 
     Conn.Open(); 
     trans = Conn.BeginTransaction(); 

     using (SqlCommand Com = new SqlCommand(ComText, Conn, trans)) 
     { 
        // delete comment 
        // update score 
     } 
     trans.Commit(); 
     } 
    catch (Exception Ex) 
    { 
     if (trans != null) trans.Rollback(); 
     return -1; 
    } 

} 
+0

更詳細地解釋一下,我該如何解決這個問題.... –

+1

更新了答案,保持它更清晰的例子,但有幾個好的方法,詳細的很容易遵循,但有改進的餘地,取決於您的要求,但應指向正確的方向 – dove

+0

感謝您的上述代碼,它幫助了我。 –

1

當兩個功能應該writen或neighter其中之一,你需要把一個交易周圍兩種功能。

如果您提交交易,評論和降低分數將被保存在數據庫中,如果您有異常,您可以執行回滾,並且數據庫中不會發生任何事情。

相關問題