Visual Studio 2010 中的重复随机数

Duplicate Random numbers in Visual Studio 2010

我是 Vb 的新手。我正在尝试做一个关于铁路预订系统的项目。我想生成随机票号并将其保存到 ms.access 2007 文件中。到目前为止,一切正常,但我遇到的问题是,当我 运行 程序并一张接一张地预订两张票时(不停止调试),它会生成两个不同的随机票号并将它们保存到ms.access 文件,但是当我预订一张票然后停止调试并再次调试并预订另一张票时,它生成的票号与我第一次调试时预订的第一张票生成的票号相同。你能帮我解决这个问题吗?谢谢 ! 这是我的代码

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

    Dim value As Integer = CInt(Int((47563 * Rnd()) + 1))
    Dim str As String
    str = "insert into Table2 ([P_Name], [Age], [Phone], [Train_Name], [Seat_No],[Berth],[Tnumber]) values (?, ?, ?, ?, ?,?,?)"
    Dim cmd As OleDbCommand = New OleDbCommand(str, Conn)
    cmd.Parameters.Add(New OleDbParameter("P_Name", CType(TextBox1.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Age", CType(TextBox2.Text, Integer)))
    cmd.Parameters.Add(New OleDbParameter("Phone", CType(TextBox3.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Train_Name", CType(TextBox4.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Seat_No", CType(TextBox5.Text, Integer)))
    cmd.Parameters.Add(New OleDbParameter("Berth", CType(TextBox6.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("Tnumber", CType(value, Integer)))

    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        Conn.Close()
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()
        TextBox4.Clear()
        TextBox5.Clear()
        TextBox6.Clear()
        MsgBox("Ticket Booked Successfully !!! ")

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub 

乌努切号可以使用 GUID 或日期格式。

例如: 现在:2015/03/14 13:10:52 您的唯一号码可能是 20150314131052.

而不是 Rnd() 函数,实例化一个 Random 对象并使用它。

Dim random As Random = New Random
Dim ticketNumber As Int32 = random.Next(1, 47563)

请注意,这是生成票号的绝对糟糕方式。如果您使用随机数,您将总是 遇到票号冲突。

替代方法是使用系统 date/time(精确到毫秒)生成唯一的票号。

或者使用 Guid。

或数据库中的自动编号 (IDENTITY) 列。

或任何其他为您提供非重复数字/字符序列的方法。