我需要使用兩個數據庫函數,其中我需要刪除註釋,然後調用第二個函數,這會降低用戶的分數。如何處理兩個函數之間的數據調用一個接一個
問題: 如果在第二個函數中發生異常,分數不會被扣除,但評論被刪除。
我嘗試在類對象中存儲第一個函數的存儲操作,並且如果在第二個函數中發生異常,將會發生反向操作以將其重寫到數據庫中。有沒有其他辦法可以做到這一點,請給我建議。 在此先感謝
我需要使用兩個數據庫函數,其中我需要刪除註釋,然後調用第二個函數,這會降低用戶的分數。如何處理兩個函數之間的數據調用一個接一個
問題: 如果在第二個函數中發生異常,分數不會被扣除,但評論被刪除。
我嘗試在類對象中存儲第一個函數的存儲操作,並且如果在第二個函數中發生異常,將會發生反向操作以將其重寫到數據庫中。有沒有其他辦法可以做到這一點,請給我建議。 在此先感謝
您需要在同一個事務的範圍內都有數據庫調用。因此,如果您遇到異常,所有將會回滾。
這取決於你如何訪問數據庫,但它可能是這樣的:
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;
}
}
更詳細地解釋一下,我該如何解決這個問題.... –
更新了答案,保持它更清晰的例子,但有幾個好的方法,詳細的很容易遵循,但有改進的餘地,取決於您的要求,但應指向正確的方向 – dove
感謝您的上述代碼,它幫助了我。 –
當兩個功能應該writen或neighter其中之一,你需要把一個交易周圍兩種功能。
如果您提交交易,評論和降低分數將被保存在數據庫中,如果您有異常,您可以執行回滾,並且數據庫中不會發生任何事情。
結合到一個功能,以避免額外的處理? – Raptor
在一個函數中,如果執行完第一個查詢之後發生異常,比.... –