0

我想阻止人们不断地同步/更新数据库中的项目,因为这可能会导致潜在的问题。我有时间最后一次同步/更新发生在数据库中。我需要做的是禁止用户启动另一个更新/同步,直到自上次更新/同步后 15 分钟过去。

我该怎么做呢?

更新:由于某种原因,我在 DateTime lastUpdate 上收到错误“A new expression requires (), [], or {} after type”。任何想法为什么会这样?

 DataDataContext dc = new DataDataContext();

        DateTime lastUpdate = from t in dc.Settings
                              where t.id == 1
                              select t.lastSync;


        if ((DateTime.Now - lastUpdate).TotalMinutes >= 15)
        {

        }
        else { }

更新:排序,我错过了();数据上下文!!掌心

最终更新:所有修复和工作!非常感谢您的所有帮助,对于那些认为这“闻起来很腥”或“不好”的人,这就是我所做的!

DateTime lastUpdate = (from t in dc.Settings
                               where t.id == 1
                               select t.lastSync).Single();


        if ((DateTime.Now - lastUpdate).TotalMinutes >= 15)
        {
            syncbuttons.Visible = false;
        }
        else { syncbuttons.Visible = true; }

现在请解释一下我正在尝试做的事情有什么可疑之处?阻止用户敲击数据库?如果我有 30 个用户尝试更新/同步怎么办。不会那么好吧!

4

3 回答 3

1
if (lastUpdateTime.AddMinutes(15)<DateTime.Now)
{
    // do update
}
于 2012-07-12T15:17:01.890 回答
1

导致错误的问题是您的 linq 表达式返回一个 (IQuerryable) 集合,但您正试图将其分配/转换为 DateTime。

尝试使用

        DateTime lastUpdate = (from t in dc.Settings
                     where t.id == 1
                     select t.lastSync).Single();

关于 Db 同步;我不是数据库专家,但我认为不应在任何接近重负载的地方考虑 30 个连接。如果是这样,那么优化数据库和事务会更好。

禁用同步按钮不会阻止用户点击重新加载按钮,这反过来可能会比定制的刷新过程产生更多的流量。

即使你解决了这个问题,如果你的用户群增加到每秒获得 30 个连接而没有人敲打同步按钮的程度怎么办。

所以我的建议是你回去看看你是否可以尽量减少同步的影响。一种方法可能是在您正在获取的记录上放置时间戳。比索引该列,因此它会快速查找并让数据库检查是否有任何行比用户 las 同步更新。

仅仅使您的应用程序无响应或滞后(在用户眼中)不应被视为可行的解决方案。

至少我会这样处理这个问题。

于 2012-07-12T16:07:31.710 回答
0
DateTime lastUpdate = ...;  // Retrieve from DB
TimeSpan elapsed = DateTime.Now - lastUpdate;
if (elapsed.TotalMinutes >= 15)
{
}

或者,在一行中:

if ((DateTime.Now - lastUpdate).TotalMinutes >= 15)
于 2012-07-12T15:19:05.870 回答