2011-12-16 110 views
0

我在文件的Global.asax事件的Application_Start代碼:ASP應用程序狀態

{ 
    Application["orderId"]=0 
} 

然後,我用它newOrder.aspx.cs按鈕addOrder_click遞增它,我複製此網址項目,並將其粘貼到多個頁面中,以查看是否有多個用戶添加新訂單。當我嘗試在我加載的第一頁中嘗試增加應用程序[「orderId」]時沒問題,但是當我打開另一個頁面來執行另一個數據庫時,我說另一個人:

「無法在對象中插入重複鍵'dbo .Order「

這意味着應用程序[」orderId「]用另一次零初始化。 對不起,我很難解釋我的問題。

對不起!幫我!謝謝!

回答

0

該應用程序是錯誤的地方,以跟蹤需要堅持,永不復制的東西。應用程序池可以在任何條件下重置和回收,並且每次發生這種情況時,orderid將回到0。

有很多事情可以導致應用程序重置 - 請參閱此博客的詳細信息:http://blogs.msdn.com/b/johan/archive/2007/05/16/common-reasons-why-your-application-pool-may-unexpectedly-recycle.aspx

而不是使用應用程序,您應該讓數據庫管理訂單ID。

如果orderId在數據庫中,那麼您應該將orderid列設置爲Identity(自動遞增列)並讓數據庫跟蹤orderid。在插入新記錄的地方,讓DB處理它並檢索新生成的orderId。

假設表只有以下幾列(並進一步假設這是一個SQL Server):

OrderID int identy (Primary key) 
OrderDate datetime 
Customerid int (Foreign keym but known at order time) 

insert語句應該是這樣的:

Insert into Orders (OrderDate, Customerid) VALUES (GetDate(), @Customerid);Select @@SCOPE_IDENTITY as NewOrderId From Orders; 

更多關於@ @Scope_Identity,請參閱http://msdn.microsoft.com/en-us/library/ms190315.aspx

1

每次您重新啓動應用程序時,您的訂單ID將重置爲0.如果您將此用作主鍵,會發生碰撞。

不是試圖跟蹤應用程序中的訂單ID,而是使用自動遞增字段,並在向數據庫中插入新訂單時返回值。

+0

我didnot重新啓動我的應用程序它是奔跑,我複製了很多頁面的網址,看看如果另一個用戶添加新的訂單 – koshy 2011-12-16 14:24:34