Asp.net ASP应用程序状态

Asp.net ASP应用程序状态,asp.net,Asp.net,我已在事件应用程序的Global.asax文件中启动代码: { Application["orderId"]=0 } 然后我在newOrder.aspx.cs中的按钮addOrder_中使用它,单击以增加它,然后在Visual Studio 2010中复制此项目的URL,并将其粘贴到许多页面中,以查看是否有超过个用户添加了新订单。当我在加载的第一个页面中尝试应用程序[“orderId”]的增量时,这很好,但当我打开另一个页面来执行操作时,我发现数据库中的另一个人说: “无法在对象'db

我已在事件应用程序的Global.asax文件中启动代码:

{ 
   Application["orderId"]=0
}
然后我在newOrder.aspx.cs中的按钮addOrder_中使用它,单击以增加它,然后在Visual Studio 2010中复制此项目的URL,并将其粘贴到许多页面中,以查看是否有超过个用户添加了新订单。当我在加载的第一个页面中尝试应用程序[“orderId”]的增量时,这很好,但当我打开另一个页面来执行操作时,我发现数据库中的另一个人说:

“无法在对象'dbo.theOrder'中插入重复键”

这意味着应用程序[“orderId”]在另一次初始化时为零。 很抱歉,有很多行,我很难解释我的问题


对不起!帮助我!谢谢大家!

应用程序是一个错误的地方,无法跟踪需要持久化且从不重复的内容。应用程序池在任意数量的条件下重置和回收,每次发生这种情况时,orderid都将变为0

有很多事情会导致应用程序重置-有关详细信息,请参阅本博客:

您应该让数据库管理订单id,而不是使用应用程序

如果orderId在数据库中,则应将orderId列设置为标识(自动递增列),并让数据库跟踪orderId。在插入新记录时,让DB处理并检索新生成的orderId

假设该表只有以下列(并进一步假设这是一个SQL Server):

您的insert语句如下所示:

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

有关@Scope\u Identity的详细信息,请参阅每次重新启动应用程序时,订单id都将重置为0。如果您将此用作主键,则会发生冲突


不要试图跟踪应用程序中的订单id,而是使用自动递增字段,并在将新订单插入数据库时返回值。

我没有重新启动我的应用程序,它正在运行,我将url复制到多个页面中,以查看是否有其他用户添加新订单这是测试应用程序的方法我知道我不知道它是否正确您不需要重新启动应用程序。它是自动完成的。我的答案中有一个链接解释了这一点,但这里又有一个链接+因为你的答案是正确的,而且比我的更简洁。
Insert into Orders (OrderDate, Customerid) VALUES (GetDate(), @Customerid);Select @@SCOPE_IDENTITY as NewOrderId From Orders;