随机对象多次返回相同的结果

时间:2012-06-27 16:16:47

标签: sql vb.net random

 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim s As New Staff
    Dim strConn As String

    strConn = ConfigurationManager.ConnectionStrings("ConnectionString").ToString
    Dim conn As New SqlConnection(strConn)

    Dim strSql As String
    strSql = "SELECT StaffID FROM Staff"
    Dim cmd As New SqlCommand(strSql, conn)

    Dim daMember As New SqlDataAdapter(cmd)
    Dim ds As New DataSet

    conn.Open()
    daMember.Fill(ds, "Staff")
    Dim i As Integer = ds.Tables("Staff").Rows.Count - 1
    For Each dr As DataRow In ds.Tables("Staff").Rows
        strSql = "Update CIOPassword SET CIPassword=@CI, COPassword = @CO WHERE StaffID=@id"
        Dim cmd2 As New SqlCommand(strSql, conn)
        Dim output1 As String = ""
        Dim output2 As String = ""
        Dim random As New Random()

        Dim val, val2 As Integer
        For j As Integer = 0 To 9
            val = random.[Next](1, 36)
            val2 = random.[Next](1, 36)
            output1 += ChrW(IIf(val <= 26, 64 + val, (val - 27) + 48))
            output2 += ChrW(IIf(val2 <= 26, 64 + val2, (val2 - 27) + 48))
        Next
        cmd2.Parameters.AddWithValue("@CI", output1)
        cmd2.Parameters.AddWithValue("@CO", output2)
        cmd2.Parameters.AddWithValue("@id", dr(0))
        cmd2.ExecuteNonQuery()
    Next
    GridView1.DataBind()
    conn.Close()
End Sub

基本上我每次点击按钮时都试图用2个随机数更新每条记录,我现在的问题是,系统会更新记录,但数据错误。例如,右边的所有数据都应该是不同的(随机字符串)但是对于某些行,它是用相同的数据更新的,但是随机地,row1 row2 row3与第1列和第2列具有完全相同的数据,然后第3行具有不同的数据,第二次, row1 row2具有不同数据的相同数据row3 ro4。它是随机顺序的。当我添加一个MsgBox在For循环中进行测试时,数据已正确更新所有不同的数据。

2 个答案:

答案 0 :(得分:3)

每次创建Random对象时,它都会使用当前时间作为种子创建新的随机序列。如果同时创建一堆Random个对象,它们将具有相同的种子,因此将生成相同的序列。因此,您应该只创建一个Random对象并重复使用该对象,直到完成为止。不要在循环中继续创建新的循环,因为如果循环运行得太快,它们最终将不会“随机”。

答案 1 :(得分:0)

看看这个网站。

http://www.brettb.com/RandomNumbersInDotNet.asp

您的random.[Next]可能不正确。