Mysql Unique, doppelter Eintrag = trotzdem wird ID hochgezählt

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von kassor.

    Mysql Unique, doppelter Eintrag = trotzdem wird ID hochgezählt

    Hi Jungs,
    ich habe noch ein kleines Problem was ich nicht weiss wie ich es zu lösen habe :S
    Und zwar importiere ich listen in meine Datenbank. Per Mysql Query. Um doppelte Einträge zu vermeiden habe ich eine Unique Spalte gesetzt. Wenn ich importiere, klappt auch alles nur wenn es einen gleichen Eintrag gibt, dann setzt er die Auto_increment ein höher obwohl er nicht einträgt. Und dann könnter euch vorstellen,falls ich schon mal ne Liste mit 2000 Datensätze schon mal importiert habe und ausversehen die gleiche liste noch mal importiere eine differenz in der ID von 2000 habe. Das ist doof... hier mal mein Code...

    VB.NET-Quellcode

    1. Private Sub btnImport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImport.Click
    2. Dim result As DialogResult
    3. Dim Zeile As Integer
    4. Dim ex As Object
    5. result = MessageBox.Show("Möchten Sie wirklich die Liste in die Datenbank importieren?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    6. If result = Windows.Forms.DialogResult.Yes Then
    7. 'Excel Dokument wird geöffnet
    8. ex = CreateObject("Excel.Application")
    9. ex.Workbooks.Open(OpenFileDialog1.FileNames)
    10. 'Datenbankverbindung öffnen
    11. db_verbindung_öffnen()
    12. reader = Nothing
    13. 'erste Zeile ist der Spaltenname,daher Zeile = 2
    14. For Zeile = 2 To 1000
    15. If ex.Cells(Zeile, 1).value = "" Then
    16. Exit For
    17. End If
    18. Dim einfuegen As String = "INSERT INTO servicecontracts (sno,type,customer,vatnumber,email,repairtime,deliverydate,expiredate,serviceversion,nextday,twoway,software) Values('" & ex.Cells(Zeile, 1).value & "','" & ex.Cells(Zeile, 2).value & "','" & ex.Cells(Zeile, 3).value & "','" & ex.Cells(Zeile, 4).value & "','" & ex.Cells(Zeile, 5).value & "','" & ex.Cells(Zeile, 6).value & "','" & ex.Cells(Zeile, 7).value & "','" & ex.Cells(Zeile, 8).value & "','" & ex.Cells(Zeile, 9).value & "','" & ex.Cells(Zeile, 10).value & "','" & ex.Cells(Zeile, 11).value & "','" & ex.Cells(Zeile, 12).value & "')"
    19. Dim xyz As Integer = 0
    20. Dim cmd As New MySqlCommand(einfuegen, conn)
    21. Try
    22. xyz = cmd.ExecuteNonQuery()
    23. Catch exe As Exception
    24. End Try
    25. Next
    26. ex = Nothing
    27. MessageBox.Show("Erfolgreich importiert!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    28. conn.Close()
    29. 'Neu Laden
    30. SVListeholen()
    31. Else
    32. MsgBox("cu")
    33. End If
    34. End Sub


    Dankeschonmal :)

    kassor schrieb:

    'erste Zeile ist der Spaltenname,daher Zeile = 2
    For Zeile = 2 To 1000
    If ex.Cells(Zeile, 1).value = "" Then
    Exit For
    End If

    ich sehe nirgens eine Doppelte Schleife zwecks Prüfung.

    Wenn Du Doppelte Einträge verhindern möchtest. Solltest du in der erste Schleife (ImportDatenBank) alle Einträge durchgehen,
    mittels der zweiten Schleife (Zu Importierende Daten), alle Einträge durchgehen und mit dem Wert aus der ersten Schleife vergleichen.

    Ist ein Eintrag in der Ersten Schleife vorhanden, setzt du dir eine Boolsche Variable.

    Dann erst den Wert in die ImportDatenBank eintragen (aufnehmen)
    Das wäre der manuelle Weg, aber SQL bietet ja die schöne Möglichkeit eine Spalte auf UNIQUE (einzigartig) zu setzten, so dass in der gesamten Tabelle immer nur andere Werte in dieser Splate stehen können, alles andere wird verworfen.
    Da dies direkt vom SQL Server gemacht wird, ist es um einiges effizienter als so eine Überprüfung selbst zu schreiben.
    Funktionieren tut es ja auch, lediglich das Inkrementieren wird hier fälschlicherweise trotzdem ausgeführt und das ist das Problem des Threaderstellers.

    Wobei ich denke es weniger am Programmcode liegt, sondern eher am SQL Server.
    Wie gesagt, am VB Code wohl nicht, außer mit der manuellen Methode.

    Ich habs gerade mal testweise in meinem PhpMyAdmin gemacht mit einer Testtabelle, dort wurde allerdings alles korrekt gemacht, es kommt zu einem Fehler/Exception wenn der Eintrag bereits existiert und die ID wird auch nicht inkrementiert.
    Was für einen SQL Server nutzt du??