通过ApplicationContext锁定数据库Asp.Net

通过ApplicationContext锁定数据库Asp.Net,asp.net,locking,Asp.net,Locking,我得到了一个数据库,需要在其中向表中写入条目。 我需要确保我的表在任何给定时间都只包含20行(我正在简化它)。 当然,因为我在一个web应用程序中,所以我同时有几个用户 这就是我计划做的: 我使用带有按钮“AddRecord”的aspx页面,当我单击它时,我会执行以下操作: public void click(event e...) { Object lockInstance = ApplicationContext["lockObject"]; if (lockInstance

我得到了一个数据库,需要在其中向表中写入条目。 我需要确保我的表在任何给定时间都只包含20行(我正在简化它)。 当然,因为我在一个web应用程序中,所以我同时有几个用户

这就是我计划做的:

我使用带有按钮“AddRecord”的aspx页面,当我单击它时,我会执行以下操作:

public void click(event e...)
{
    Object lockInstance = ApplicationContext["lockObject"];
    if (lockInstance  == null)
     {
     // Create Object and store it in app context.

     }

    lock(lockInstance)
    {
          // Run Query select count bla bla
          // if count < 20 then insert...
    }

}
公共作废点击(事件e.)
{
Object lockInstance=ApplicationContext[“lockObject”];
if(lockInstance==null)
{
//创建对象并将其存储在应用程序上下文中。
}
锁(锁实例)
{
//运行查询选择计数bla bla
//如果计数小于20,则插入。。。
}
}
没有触发器或存储过程(不,我没有偏见,我为之工作的人是:)

有比依赖应用程序上下文更好的方法吗


谢谢

您的解决方案在web garden或负载平衡web farm场景中不起作用。我建议您使用适当的DB锁

例如,你可以。开始一个事务,使用TABLOCKX执行select语句(它以独占方式锁定表),如果行数少于20行,则添加一些行,最后提交事务


请参阅。

更正web garden中的非工作或负载平衡,我也读过,但感谢您指出:)