user4570754
user4570754

Reputation:

Duplicate Random numbers in Visual Studio 2010

I am new to Vb . I am trying to make a project on railway reservation system . I want to generate random ticket number and save it to the ms.access 2007 file . So far , everything is quite working properly but the problem I am having is that when I run the program and book two tickets one after another (without stop debugging ) , it generates two different random ticket numbers and saves them to the ms.access file but when I book one ticket and then stop debugging and after that debug again and book another ticket , it generates the same ticket number as it generated for the first ticket which I booked when I debug for the first time . Could you help me how should I fix this issue ? Thank you ! This is my code

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 

Upvotes: 0

Views: 118

Answers (2)

codemania
codemania

Reputation: 44

You can use GUID or Date format for Unuqie Number.

For example: Now : 2015/03/14 13:10:52 your unique number may be 20150314131052.

Upvotes: 0

Sam Axe
Sam Axe

Reputation: 33738

Instead of the Rnd() function, instantiate a Random object and use that.

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

Note though that this is an absolute TERRIBLE way to generate a ticket number. You will ALWAYS get ticket number collisions if you use random numbers.

Alternative methods would be to use the system date/time (to the millisecond) to generate unique ticket numbers.

Or use a Guid.

Or an AutoNumber (IDENTITY) column in your database.

Or any other method that gives you a non-repeating sequence of numbers / characters.

Upvotes: 2

Related Questions