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

时间:2015-03-11 21:43:46

标签: asp.net sql-server vbscript timer updatepanel

当只有一个用户时,页面会表现出来。当多个用户访问该页面时,每个用户的Timer1正在使Table1的column1(布尔值)切换为False。用户越多,混乱就越疯狂。

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

我该如何做到这一点,以便用户不会检查和更新同一个Table1的第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>

定时器vb代码每5秒完成一次..

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

1 个答案:

答案 0 :(得分:1)

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

或者,您可以存储&#39;版本&#39;为同一目的记录的号码。基本上,任何渐进的值都会优于是/否系统。