Sub Vote_Click(sender As Object, e As EventArgs) Msg.Text = ""
' 检查是否有选取某一个选择钮 If Not Candidate.SelectedItem Is Nothing Then Dim Sel As String = Candidate.SelectedItem.Text Dim Conn As OleDbConnection, Cmd As OleDbCommand Dim Rd As OleDbDataReader, SQL As String Dim NextTime As Integer
Conn = New OleDbConnection( Provider & ";" & DataBase ) Conn.Open() ' 检查上次投票时间是否已经超过 10 分钟 Dim IP = Request.ServerVariables("REMOTE_ADDR") SQL = "Select * From VoteRecord Where IP = '" & IP & "' " SQL &= "Order By VoteTime Desc" Cmd = New OleDbCommand( SQL, Conn ) Rd = Cmd.ExecuteReader() If Rd.Read() NextTime = 10 - DateDiff("n", Rd.Item("VoteTime"), Now) End If Rd.Close()
' 没投过票或距离上次投票已经超过 10 分钟 If NextTime <= 0 Then ' 将得票数加一 SQL = "Update Vote Set 得票数=得票数+1 " & _ "Where 世界奇景='" & Sel & "'" Cmd = New OleDbCommand( SQL, Conn ) Cmd.ExecuteNonQuery() ' 记录 IP 及 投票时间 Dim Tm = Format(Now(), "MM/dd/yyyy HH:mm:ss") SQL = "Insert Into VoteRecord (IP, VoteTime) " & _ "Values ('" & IP & "', #" & Tm & "#)" Cmd = New OleDbCommand( SQL, Conn ) Cmd.ExecuteNonQuery() Response.Redirect( "Result3.aspx" ) Else Msg.Text = "您已经投过票了, 不能重复投票!" End If Conn.Close() End If End Sub这样已经足够了
上边都加说明了阿 vb自己翻译成c#不就行了
to: jyk(jyk)楼主不是说一个ip在一段时间里不能投票马, Dim IP = Request.ServerVariables("REMOTE_ADDR") SQL = "Select * From VoteRecord Where IP = '" & IP & "' " SQL &= "Order By VoteTime Desc" Cmd = New OleDbCommand( SQL, Conn ) Rd = Cmd.ExecuteReader() 这一部分会根据上网机器的ip读取数据,假设上网机器的ip地址出现在数据库中,则将含有此ip得数据全部选出,按时间颠倒排序,然后执行下一句 If Rd.Read() NextTime = 10 - DateDiff("n", Rd.Item("VoteTime"), Now) End If 也就是读出最近的一笔,然后计算与当前时间的时间差是否超过设定时间 懂了吧
Msg.Text = ""
' 检查是否有选取某一个选择钮
If Not Candidate.SelectedItem Is Nothing Then
Dim Sel As String = Candidate.SelectedItem.Text
Dim Conn As OleDbConnection, Cmd As OleDbCommand
Dim Rd As OleDbDataReader, SQL As String
Dim NextTime As Integer
Conn = New OleDbConnection( Provider & ";" & DataBase )
Conn.Open() ' 检查上次投票时间是否已经超过 10 分钟
Dim IP = Request.ServerVariables("REMOTE_ADDR")
SQL = "Select * From VoteRecord Where IP = '" & IP & "' "
SQL &= "Order By VoteTime Desc"
Cmd = New OleDbCommand( SQL, Conn )
Rd = Cmd.ExecuteReader()
If Rd.Read()
NextTime = 10 - DateDiff("n", Rd.Item("VoteTime"), Now)
End If
Rd.Close()
' 没投过票或距离上次投票已经超过 10 分钟
If NextTime <= 0 Then
' 将得票数加一
SQL = "Update Vote Set 得票数=得票数+1 " & _
"Where 世界奇景='" & Sel & "'"
Cmd = New OleDbCommand( SQL, Conn )
Cmd.ExecuteNonQuery() ' 记录 IP 及 投票时间
Dim Tm = Format(Now(), "MM/dd/yyyy HH:mm:ss")
SQL = "Insert Into VoteRecord (IP, VoteTime) " & _
"Values ('" & IP & "', #" & Tm & "#)"
Cmd = New OleDbCommand( SQL, Conn )
Cmd.ExecuteNonQuery() Response.Redirect( "Result3.aspx" )
Else
Msg.Text = "您已经投过票了, 不能重复投票!"
End If
Conn.Close()
End If
End Sub这样已经足够了
vb自己翻译成c#不就行了
Dim IP = Request.ServerVariables("REMOTE_ADDR")
SQL = "Select * From VoteRecord Where IP = '" & IP & "' "
SQL &= "Order By VoteTime Desc"
Cmd = New OleDbCommand( SQL, Conn )
Rd = Cmd.ExecuteReader()
这一部分会根据上网机器的ip读取数据,假设上网机器的ip地址出现在数据库中,则将含有此ip得数据全部选出,按时间颠倒排序,然后执行下一句
If Rd.Read()
NextTime = 10 - DateDiff("n", Rd.Item("VoteTime"), Now)
End If
也就是读出最近的一笔,然后计算与当前时间的时间差是否超过设定时间
懂了吧
不过好像对于Request好像有直接得到远程主机IP的属性Request.UserHostAddress.