2013-03-01 67 views
-1

我有wpf,c#,sql express應用程序,這意味着帶有數據庫的軟件。比方說,我有一個標籤項目,裏面的標籤項目有數據網格。從一個數據網格中,我購買員工並將其放入Basket Data網格。假設在我的主數據網格中有10支鉛筆,我買了5支。現在它在主數據網格中是5,在籃子數據網格中是5。直到我按下購買按鈕,它會留在籃子裏。 現在我的問題是,假設電力下降,我的申請被關閉。在我的主數據網格中是5,初始化後Basket是0。所以我失去了我在籃下的東西。我可以在關閉應用程序或關閉標籤項時進行管理。但是,如果應用程序關閉不當,無法管理它。是否有任何機制,方法,事件來處理這在C#中? 我知道你們大多數人會說使用交易,我將在下一個版本中使用,這將不會很快。現在我想找出如何處理這個事務。 我希望你明白我的意思。有任何想法嗎?是否有任何事件可能會導致應用程序關閉不當?

這裏的例子 假設你在你的股票(主數據網格)中給了12支鋼筆和15支鉛筆。你從你的股票出售2筆和5支鉛筆。而當你銷售它將會去籃子數據網格。現在在主數據網格中有10支筆和10支鉛筆。在籃子2筆和5支鉛筆。如果我不點擊提交按鈕,它不會被記錄在銷售數據庫中。假設我正在工作,銷售庫存和電力的項目下降。我的股票中有10支筆和10支鉛筆。籃子是空的。並且它不記錄在銷售數據庫中,因爲未點擊按鈕

+0

這可能不是您要查找的內容,但您可以使用備用電池並立即將所有內容刷新到磁盤並在電源出現故障時正常關閉。 – 2013-03-01 17:24:06

+0

因此,您更新DataGrid值(並從數據庫中刪除項目),但Basket中的內容未保存在數據庫中?這是你目前在做什麼? – 2013-03-01 17:24:30

+1

你的問題不清楚。這些數據與應用程序流程以一種奇怪的方式結束有什麼關係? – 2013-03-01 17:25:03

回答

0

最簡單的方法是在添加項目時在數據庫中設置髒標誌以及籃子的詳細信息。

然後當結賬過程完成時清除髒標誌。

然後,當您重新啓動應用程序檢查此標誌。如果清楚的話,你可以從頭開始。如果它已經設置好,然後拉回籃子的細節並處理它,但是你需要。

這不是很乾淨,但它會完成工作。

+0

非常好的解釋,你向我展示了很好的方向。但現在的問題是如何檢索籃子的細節? – 2013-03-02 05:37:11

+0

@FirdavsKurbonov - 您需要將它們存儲在應用程序的會話/調用之間的某個地方。這可能是本地存儲或甚至數據庫。 – ChrisF 2013-03-02 11:30:28

+0

我將爲籃子創建臨時表並在應用程序啓動時檢查它,如果有項目返回到主數據網格。謝謝你的幫助。 – 2013-03-02 17:52:15

0

所以我現在還不能完全確定這是如何工作在你的代碼,但我會告訴你答案了兩種方式:

  1. 如果您只存儲庫存數據(即雲在主網數據)在數據庫中,那麼當應用程序關閉時,由於內存丟失,您將丟失Basket中的所有內容。如果是這種情況,您唯一的解決方案是將數據存儲在數據庫中的籃子中。

  2. 如果存儲機器人的庫存和在DB籃下的數據,那麼你有一些這樣的代碼:


    update inventory 
    update basket 

如果你的問題是應用程序這兩個之間強行關閉行代碼,那麼唯一的解決辦法是增加一個事務範圍:

start transaction 
update inventory 
update basket 
end transaction 

這是爲了確保數據安全的唯一途徑。

如果您處於案例1中,您應該實施該解決方案,但實際上這會爲您帶來案例2.因此,我建議您不要等到下一個版本實施事務處理範圍。

我希望這會有所幫助。

+0

感謝您的評論我會考慮。 – 2013-03-02 17:51:21

相關問題