多个用户导致数据库行为每个使用计时器访问页面的用户更新

Multiple users causes database row to get updated for each user accessing page with Timer

当只有一个用户时,页面行为。当多个用户访问该页面时,每个用户的 Timer1 都会导致 Table1 的 column1(布尔值)切换为 False。用户越多越乱

我在另一个 table (TableX) 上有一个数据库触发器 (triggerX),每次更新某个 TableX 列时,Table1 的 column1 都会设置为 True。问题是,当有多个用户时,这个 column1 会在另一个用户变为 False 之前切换到 False。一个用户的 False 破坏了另一个用户的 True。用户越多,False column1 就越多。

我该怎么做才能让用户不检查和更新同一个表 1 的第 1 列的第 1 行?

<asp:UpdatePanel runat="server" id="UpdatePanel1" UpdateMode="Conditional"
ChildrenAsTriggers="false">
<ContentTemplate>
<asp:Timer runat="server" id="Timer1"  OnTick="Timer1_Tick" Interval="5000">
</asp:Timer>  
<Label id="Label1">
</ContentTemplate> 
</asp:UpdatePanel>

还有每 5 秒完成一次的计时器 vb 代码..

Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
    Dim ds As DataSet
    ds = fillDataset("SELECT column1 FROM [Table1]", connstring, False)
    If (ds.Tables(0).Rows(0).Item("column1") = True) Then
        Using sqlCon = New SqlConnection(connstring)
            sqlCon.Open()
            Dim sqlText = "UPDATE Table1 SET column1='False' WHERE column1 IS NOT NULL;"
            Dim cmd = New SqlCommand(sqlText, sqlCon)
            cmd.ExecuteNonQuery()
        End Using
        UpdatePanel1.Update()
    End If
End Sub

我会存储最后一次 date/time 您的记录更改。当用户加载结果时,将 date/time 存储在隐藏字段中,以便将其回发并与当前最后一个 date/time 进行比较。这将消除您的混乱并允许多个用户根据他们最后显示的结果进行适当更新。

或者,您可以出于相同目的在记录中存储一个 'version' 号码。基本上,任何累进值都会比 yes/no 系统更好。