簡體   English   中英

沒有事務的回滾SQL

[英]Rollback SQL without transaction

我有一個Windows服務,該服務將數據上傳到數據庫,還有一個使用上述服務的MVC應用。 今天的工作方式是這樣的:

Upload(someStuff);
WriteLog("Uploaded someStuff");
ReadData(someTable);
WriteLog("Reading someTable-data");
Drop(oldValues);
WriteLog("Dropping old values");


private void Upload(var someStuff)
{
    using(var conn = new connection(connectionstring))
    {
        //performQuery
    }
}

private void WriteLog(string message)
{
    using(var conn = etc..)
        //Insert into log-table
}

private string ReadData(var table)
{
    using etc..
        //Query
}
///You get the gist.

然后,客戶端可以通過查詢日志表來查看上載的當前狀態。

如果某件事失敗,我希望能夠執行回滾。 我首先想到的是使用BeginTransaction() ,最后使用transaction.Commit() ,但這會使我的狀態消息表現不佳。 它只是從“開始上傳”開始,然后快進到最后一步,在“完成”之前它將等待很長時間。

我希望用戶能夠看到該過程是否停留在某個特定步驟上,但是如果發生意外情況,我仍然希望能夠執行完整的回滾。

我該如何實現?

編輯:我似乎不太清楚我的問題。 如果我為日志記錄做一個單獨的連接,那確實可行。 問題在於實際代碼將以超快的速度執行,因此狀態消息傳遞得如此之快,以至於用戶甚至在最終的“提交”消息之前將無法看到它們,這將占用上載時間的99%。

設計表,使其具有(P)結束,(A)主動(D)刪除標志-然后執行更新,創建新記錄,稱為“待處理”狀態P-最后一步是更改當前活動目錄到已刪除,待處理為有效(您可以在事務中執行此操作)。 然后,您可以隨時刪除狀態D(已刪除)記錄。

如果發生錯誤,“待定”記錄可能會被刪除

暫無
暫無

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

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