2012-06-27 69 views
0
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 [email protected], COPassword = @CO WHERE [email protected]" 
     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相同的数据row3。它是随机的。当我添加一个MsgBox在For循环中进行测试时,所有不同的数据都正确更新了数据。随机对象多次返回相同的结果

回答

3

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

+0

非常感谢,您的评论是有用的我解决了我的问题。谢谢 – user236501

相关问题