我是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
答案 0 :(得分:2)
而不是Rnd()
函数,实例化Random
对象并使用它。
Dim random As Random = New Random
Dim ticketNumber As Int32 = random.Next(1, 47563)
请注意,这是生成票号的绝对可怕方式。如果您使用随机数,您将始终获取票号冲突。
替代方法是使用系统日期/时间(以毫秒为单位)生成唯一的票号。
或者使用Guid。
或数据库中的AutoNumber(IDENTITY)列。
或任何其他方法,为您提供非重复的数字/字符序列。
答案 1 :(得分:0)
您可以对Unuqie Number使用GUID或日期格式。
例如: 现在: 2015/03/14 13:10:52 您的唯一号码可能 20150314131052 。