C# 在ASP.NET中处理从多个会话到数据库的多个插入
我有一个asp.net应用程序,允许用户登录并保存不同时段的约会。这是一个多用户应用程序,多个用户可以同时登录并预订约会 我有一个存储过程,它将约会时间段数据插入数据库,在选择时间段后单击save按钮时调用该数据库 当两个或多个用户试图同时在同一插槽上保存约会时,我遇到了一个问题。在这个场景中,我希望只允许一次插入,并向所有其他插入存储过程的调用返回一条错误消息 复制步骤:C# 在ASP.NET中处理从多个会话到数据库的多个插入,c#,asp.net,sql-server,session,ado.net,C#,Asp.net,Sql Server,Session,Ado.net,我有一个asp.net应用程序,允许用户登录并保存不同时段的约会。这是一个多用户应用程序,多个用户可以同时登录并预订约会 我有一个存储过程,它将约会时间段数据插入数据库,在选择时间段后单击save按钮时调用该数据库 当两个或多个用户试图同时在同一插槽上保存约会时,我遇到了一个问题。在这个场景中,我希望只允许一次插入,并向所有其他插入存储过程的调用返回一条错误消息 复制步骤: 用户1选择1个插槽。用户2选择与用户1相同的插槽 User1和User2-插槽的填充数据 用户1和2同时单击保存按钮 这将
简而言之,我希望只允许执行一次存储过程,并向所有其他插入返回一个错误。乐观方式 您可以将时间戳列添加到约会槽表中,以在多个用户同时处理同一行时保持完整性 一旦添加了时间戳,就需要将其发送到UI,以便在更新时将其传递回DB 在更新行时,如果时间戳相同,则继续事务,如果时间戳已更改,则需要回滚事务 悲观的方式 当有人想要预订时锁定插槽,这样其他人就无法打开插槽进行预订,唯一的问题是,当有人在没有任何事务的情况下关闭应用程序时,您需要通过一些后台逻辑将其解锁 有关这两种方法的更多详细信息,请检查此项。如果时隙是主键或具有唯一约束,则SQL会为您执行此操作。你应该这样设计
如果要从存储过程返回消息,可以在尝试插入之前检查主键 什么不起作用?默认情况下,SQL Server使用乐观并发。所以你应该得到一个并发异常。在创建记录之前,我会让存储过程或你的代码检查时隙是否仍然可用。如果可能的话,可能是插槽数据类型的唯一约束?谢谢你的解决方案…采用了悲观的方式。那篇文章读得很好!