2011-10-11 44 views
1

如果瀏覽器在我的Web應用程序中途關閉,我嘗試停止將數據存儲到數據庫。如何讓瀏覽器在中途關閉時回滾應用程序?

例如:

提交按鈕,過程中點擊後,有人關閉瀏覽器窗口或互聯網連接已斷開。我希望應用程序回滾所有提交的數據。有沒有可能在應用程序中執行此操作而不更改存儲過程中的配置?

+0

我認爲這是一種非常罕見的情況,除非您的進程需要保存數據需要很長時間,但這不是正常情況。那麼保存數據的時間太長,以致用戶在完成保存之前有可能關閉瀏覽器? – Aristos

回答

0

不可以 - 如果沒有創建解決方案的最終解決方案,這是不可能的。

通常情況下,像這樣的數據分階段承諾。如果他們從未「完成」下一步,他們之前的數據將在稍後的某個過程中被刪除。

0

我可以在Response.IsClientConnected上建議一個基於Response.IsClientConnected的想法,該想法會告訴你用戶是否仍然連接。

我認爲sql命令插入數據太快了你從來沒有抓過它,如果sql命令不是那麼快,你可以試試它,甚至我建議找到一種不同的方式來應用長時間需要sql事務。另外,如果用戶停止與頁面的連接,則也會拋出異常。

BEGIN Tran  

    ...Sql Command... 

    if (Response.IsClientConnected) 
    { 
     ...Commit.... 
    } 
    else 
    { 
     ...Rollback.... 
     return; 
    } 
0

我很好奇你是如何執行你的數據訪問的。如果你使用.NET,我會對System.Transactions.TransactionScope()做一些研究。這是交易的替代,如前面提到的,在SQL並且只取決於你的數據訪問層實現(如實體框架或LINQ to SQL的主場迎戰存儲過程或普通的T-SQL)

http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

除了這個建議之外,作爲開發人員來控制這些邊緣案例是由你自己決定的。例如,如果用戶在多步驟過程中;正是在這裏,業務規則和用例定義了你如何處理這種情況。實施交易狀態可能是一種選擇,其中一些解僱其他人保存它的廢料數據,以防止用戶返回。鑑於此,我認爲這可能是一個設計問題,而不是發展問題。

我希望這會有所幫助。乾杯!

相關問題