2011-09-10 87 views
1

大家好我想在我的要求中使用MySqlTransaction。其實我對此有疑問,即根據我的要求,我將不得不從數據庫中刪除不同的值。在使用MySqlTransaction時需要幫助

我正在做的過程如下。假設我有2 EmpIDs這個EmpID將保持不同的值,可能是多個值。我將使用Dictionary存儲特定EmpID的相應值,然後我將它們保存到與EmpID對應的列表中。

假設我有一個列表元素如下

對於EmpID1我將有1,2。我將檢查此列表中數據庫的最大值,如果存在,我想從數據庫中刪除此EmpID。對於EmpID2我將有1,2。但在我的數據庫中,我將有3作爲最大值。所以這個失敗了。我想rollback以前刪除的項目。

是否有可能與transaction做,如果這樣任何一個可以幫助我解決這個

示例代碼我

if(findMax(lst,iEmpID) 
    { 
     obj.delete("storeprocname"); // this will occur when my list has maximum value 
    } 
else 
{ 
    //Here i would like to rollback my previous one referring to the delete method in class file 
} 

我的示例代碼

if (findMaxPayPeriodID(lstPayPeriodID, iEmpIDs)) //Assume for the first time maxpayperiod exists and for the second time it fails how to rollback then 
    { 
    if (findSequence(lstPayPeriodID)) // Assume this is also true for first time 
    { 
     for (int ilstPayperiodID = 0; ilstPayperiodID < lstPayPeriodID1.Count; ilstPayperiodID++) 
    { 
     oAdmin.Payperiodnumber = (int)lstPayPeriodID1[ilstPayperiodID]; 
    for (int ilistPayYear = iPayYearcnt; ilistPayYear < lstPayYear1.Count; ilistPayYear++) 
    { 
     oAdmin.PayYear = (int)lstPayYear1[ilistPayYear]; 
     iPayYearcnt++; 
     break; 
    } 
    for (int ilistDateTime = idtcnt; ilistDateTime < lstDateTime1.Count; ilistDateTime++) 
    { 
    idtcnt++; 
    oAdmin.PaymentDate = lstDateTime1[ilistDateTime]; 
    break; 
    } 
     } 
    if (oAdmin.deletePayRoll(oSqlTran)) 
    { 
    oMsg.Message = "Deleted Sucessfully"; 
    oMsg.AlertMessageBox(out m_locallblMessage); 
    Page.Controls.Add(m_locallblMessage); 
    oAdmin.FedTaxID = ddlFedTaxID.SelectedValue; 
    oAdmin.PayFrequency = ddlPaymentType.SelectedValue.ToString(); 
    mlocal_strStoredProcName = "uspSearchPayRoll"; 
    oAdmin.getPayRollDetails(out mlocal_ds, mlocal_strStoredProcName); 
    //grdPayroll.Visible = true; 
    grdPayroll.DataSource = mlocal_ds; 
    grdPayroll.DataBind(); 
    if (mlocal_ds != null) 
    { 
     btnDelete.Visible = true; 
    } 
    else 
    btnDelete.Visible = false; 
    } 
    lstPayPeriodID.Clear(); 
    lstDateTime.Clear(); 
    lstPayYear.Clear(); 
    iPayIDcnt = 0; 
    iPayYearcnt = 0; 
    idtcnt = 0; 
    } 
else 
    { 
rollback should be done 
} 
+0

任何想法請 – Dotnet

回答

0

你不提供足夠的信息 - 尤其是因爲看起來您將使用存儲過程進行刪除操作,所有投注都關閉...

我能想到的唯一選擇是確保您首先找到不是來自一個列表的最大EmpId,而是來自所有首先列出...然後只是檢查對數據庫,並採取相應的行動...

這樣DB只會被擊中兩次(對於檢查和刪除/存儲過程)......這是最好的在縮放等方面

+0

因此,通過使用存儲過程,我們不能這樣做 – Dotnet

+0

存儲過程可以實現自己的事務處理,所以在最好的情況下,這將是非常脆弱的...因此:不 - 不把它結合你描述的方式 – Yahia

+0

那麼我怎麼能達到我的要求,我試圖通過編寫函數刪除布爾我有,如果真的刪除,如果不是回滾,但這不工作任何幫助請 – Dotnet