如何处理多个用户

时间:2014-03-29 20:16:49

标签: c# asp.net asp.net-mvc c#-3.0

我的页面顶部有一个文本框。加载页面时,代码将运行文本框的值,即Textbox.text= something。该代码的逻辑是:

  1. 从数据库中获取特定表的特定列的最后一个值(始终为整数)
  2. 添加1
  3. 显示在文本框中。
  4. 它完美无缺。但我想知道如果两个用户访问同一页面,我应该在加载页面时如何处理这种情况。

    示例当列表加载时,DB列中的最后一个值为8,并在文本框中显示为9。

    但是,如果两个用户在不同的浏览器上同时加载页面会导致问题,因为我不想在我的列中重复。

2 个答案:

答案 0 :(得分:0)

这里你可以做的是在插入db之前先获取colum中的最后一个值然后+1值,然后将其插入db。

但有一个问题是,如果您的User1和User2在文本框中看到 8 值,并且User1点击按钮 9 将存储在db列中,然后是User2点击按钮 10 值将被存储。

答案 1 :(得分:0)

最好的办法是将数据库值加载到内存中(例如静态变量),并在递增并将结果返回给各个用户之前使用lock的方法。 e.g。

private static object _syncRoot = new object();
private static int? dbValue;
public static int GetNewDbValue()
{
    if (dbValue == null)
    {
        // load db value from database
    }

    // lock ensures only one user can increment at a time
    lock (_syncRoot)
    {
        dbValue++;
        return dbValue;
    }
}

只要您没有运行Web场或负载平衡,这将起作用。如果你想远离静电,你可以尽可能地确保你使用的对象可以集中访问。