簡體   English   中英

執行C#代碼時出現事務問題

[英]A transaction problem while executing a C# code

在M代碼中,我收到一個錯誤,“此SqlTransaction已完成;它不再可用。” 生成此代碼的代碼行是sqlTransaction

MSSqlConnectionHandler.CommitTransaction();

這個CommitTransaction函數是

public static void CommitTransaction()
    {
        try
        {
            _theTran.Commit();
        }
        catch (Exception Ex)
        {
            try
            {
                _theTran.Rollback();
            }
            catch (Exception InnerEx)
            {
                throw InnerEx;
            }
            throw Ex;
        }
    }

但是,我注釋掉了這個MSSqlConnectionHandler.CommitTransaction(); 行,然后沒有發生錯誤,但也沒有保存數據。 出了什么問題,我應該在這里提供什么以使其更清楚? Thanx提前

該錯誤表明事務正在代碼中的其他位置提交, _theTran是一個可以在其他地方使用和提交的實例變量嗎?

可能性是交易所在的連接已關閉。 如果是這樣的話,那就叫:

_theTran.Commit(); 

會發生錯誤。

無論誰打電話

CommitTransaction

應該在提交之前做一些檢查,比如這樣的事情:

if (conn.State == ConnectionState.Open) 
{
     if (_theTran != null)
     {
          CommitTransaction();
     }
     conn.Close();
}

就異常處理而言,異常處理程序除了重新拋出之外什么都不做。 如果在提交時發生異常,則嘗試回滾並始終拋出。 我認為你不需要內在的嘗試。

try
{             
    _theTran.Commit();         
}         
catch (Exception)
{                        
    _theTran.Rollback();             
    throw;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM