prevent duplicate entries to database

前端 未结 3 1807
予麋鹿
予麋鹿 2020-12-04 01:05

I want to prevent duplicate entries to my inventory form using vb.net and MySQL as the database, here is my code:

 Private Sub Button4_Click(ByVal sender As          


        
相关标签:
3条回答
  • 2020-12-04 01:30

    found the answer, as what @e4c5 said, its a wrong approach, so I restructed my code and finally made it work, just want to share the answer maybe it will help others.

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    Dim myCommand As New MySqlCommand
    Dim conn As MySqlConnection
    Dim i As String
    conn = New MySqlConnection
    conn.ConnectionString = "server = localhost;username= root;password= a;database= secret"
    Try
        conn.Open()
    Catch mali As MySqlException
        MsgBox("connot establish connection")
    End Try
        Dim retval As String
        Select Button4.Tag
                Case "ADD"
        with myCommand
           .Connection = conn
           .CommandText = "Select pcode from personnel where pcode = '" & pcode.Text & "'"
            retval = .ExecuteScalar
        If retval Is Nothing Then
          .CommandText = "Insert into personnel values ('" & pcode.Text & "','" & lname.Text & "','" & fname.Text & "','" & office.text & "','" & designation.Text & "')"
          .ExecuteNonQuery()
      Else
      MsgBox("Personnel ID Already Exist!", MessageBoxIcon.Error, "Error")
     End If
    End With
    End Sub
    
    0 讨论(0)
  • 2020-12-04 01:31

    There should be the way you:

    1) write a Trigger before Insert, and check if there is any similar row exist.
    2) Put Unique Index on columns

    0 讨论(0)
  • 2020-12-04 01:40

    Sorry to say this is the wrong approach.

    Databases have a built in system to prevent data being duplicated. That's through primary keys or unique key constraints. In your case, you have already created a primary key. So there is absolutely no need for you to do that SELECT COUNT(*) query.

    Instead, just directly insert into the table and catch the integrity error when the pcode already exists.

    Try
        cmd = New MySqlCommand("Insert into personnel values('" & pcode.Text & "','" & lname.Text & "','" & fname.Text & "','" & office.Text & "','" & designation.Text & "')")
    
        i = cmd.ExecuteNonQuery
    
    
        If pcode.Text <> "" Then
        ElseIf i > 0 Then
            MsgBox("Save Successfully!", MessageBoxIcon.Information, "Success")
            mrClean()
            ListView1.Tag = ""
            Call objLocker(False)
            Call LVWloader()
            Call calldaw()
        Else
            MsgBox("Save Failed!", MessageBoxIcon.Error, "Error!")
        End If
    Catch ex As MySqlException
        MsgBox("Personnel ID Already Exist!", MessageBoxIcon.Error, "Error!")
    End Try
    

    Please also refer to the MySQL Manual Page PRIMARY KEY and UNIQUE Index Constraints

    0 讨论(0)
提交回复
热议问题