2011-12-16 89 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