防止在 ASP.NET 中使用 ADO.NET 并发执行存储过程

Prevent concurrent execution of stored procedure with ADO.NET in ASP.NET

我想防止两个用户同时执行同一个存储过程。如果有两个 ASP.NET 请求来执行该存储过程,那么它们应该以串行方式依次执行。

SQL 服务器数据库和执行由 ado.net 处理。

以下任何方法都有助于实现这一目标吗?什么是最合适的方法?还有其他方法可以达到同样的效果吗?

  1. 通过将隔离级别设置为 Serializable

    使用 ado.net 事务执行存储过程
  2. 在存储过程中使用sp_getapplock,最后释放

我建议在架构的中间层使用排队系统,在 ASP.NET 和数据库之间。这样就可以按顺序接收和处理请求。然后您可以将系统配置为一次只处理一个请求,

Execute the stored procedure with ADP.NET transaction by setting isolation level to Serializable

是的,您可以在 ADP.NET 事务中使用 Serializable 隔离级别。它是最高的隔离级别,它依赖于悲观的并发控制并通过假设两个事务可能尝试更新相同的数据并使用 locks 来确保它们不会更新来保证一致性。 一个事务必须等待另一个事务完成,它们可能会死锁。

Use sp_getapplock inside stored procedure and release at the end

是的,您可以使用 SQL 服务器应用程序锁 sp_getapplock。您将必须使用 sp_releaseapplock

释放锁定

另一种选择是使用 Global Temporary Tables