Daten können nicht in die Tabelle geschrieben werden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Cell.

    Daten können nicht in die Tabelle geschrieben werden

    Hallo zusammen, ich habe hier ein sehr kurioses Problem das ich nicht so wirklich verstehe.

    Ich soll ein Programm das mit Mysql arbeitet und unter VB6 entwickelt wurde um einige Funktionen erweitern. Da wer immer dieses Programm allerdings geschrieben hat scheinbar noch nie davon gehört hat wie man Relationen richtig setzt sind die Daten Teilweise inkonsistent und Teilweise wurden Stingwerte als Identifizirungsmerkmale eingesetzt. Desshalb habe ich beschlossen das Programm von grund auf neu zu schreiben und bei der Gelegenheit auch die Daten gleich zu bereinigen. Also habe ich auf einem MSSQL ein neues Datenmodel erstellt und beginne damit die Daten Datensatz für datensatz auf konsistenz zu prüfen und dann in meine neue DB einzufügen.

    So viel zum Hintergrund.

    Bei dieser Arbeit bin ich auf ein sehr merkwürdiges Phänomen getroffen, dass ich mir nicht erklären kann. Ich habe hier 2 Basistabellen. Stellen / Faehigkeiten und eine Tabelle die eine fremdschlüsselbeziehung zu beiden Basistabellen hat.

    Ich arbeite also die alte Tabelle die bis auf die Relationen genau so aufgebaut ist durch und kopiere die Datensätze und bekomme dann Folgenden Fehler:

    Die INSERT-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschränkung 'FK_stellen_faehig_Stellen'. Der Konflikt trat in der qualimatrix-Datenbank, Tabelle 'dbo.Stellen', column 'ID' auf. Die Anweisung wurde beendet.

    Der Fehler ist soweit klar. in der Tabelle stellen gib es offensichtlich keinen Datensatz dessen ID passt. Aber genau da liegt der Knackpunkt. Den Datensatz gibt es.

    Ich habe mit also im Debugmodus angesehen welche Variablenwerte in die Datenbank geschrieben werden sollen und mit den Basistabellen verglichen. Die Datensätze sind definitiv da.

    Also habe ich meinen Code in 2 verschiedene Prozeduren aufgesplittet Prozedur 1 enthält die schleife und übergibt dann die Daten immer an Prozedur 2 die diese dann in die Datenbank schreiben soll. Das ganze sieht wie folgt aus

    Prozedur 1:

    VB.NET-Quellcode

    1. Private Sub StellenFaehigMigrieren()
    2. Dim ta As New qualimatrixDataSet1TableAdapters.stellenfertTableAdapter
    3. ta.Fill(dsalt.stellenfert)
    4. For Each dr As qualimatrixDataSet1.stellenfertRow In dsalt.stellenfert.Rows
    5. stellenFaeeinfügen(dr.stellenid, dr.fertigkeitid)
    6. Next
    7. End Sub


    Prozedur 2:

    VB.NET-Quellcode

    1. Private Sub stellenFaeeinfügen(ByVal stellenid As Integer, ByVal FaeID As Integer)
    2. Dim ta As New qualimatrixDataSetTableAdapters.stellen_faehigTableAdapter
    3. Dim dr As qualimatrixDataSet.stellen_faehigRow
    4. dr = dsneu.stellen_faehig.Newstellen_faehigRow
    5. dr.StellenID = stellenid
    6. dr.FaehigkeitID = FaeID
    7. dsneu.stellen_faehig.Rows.Add(dr)
    8. ta.Update(dsneu.stellen_faehig)
    9. End Sub


    Natürlich bekomme ich beim ausführen wieder die gleiche Fehlermeldung. Aber komischerweise Kommt der Fehler nicht wenn ich die gleichen Daten die ich mir vorher im Debugmode aufgeschrieben habe direkt an Prozedur 2 übergebe und die Daten werden korrekt in die Datenbank geschrieben.

    Kann mir das irgendjemand erklären?

    Hier die Prozedur die funktioniert:

    VB.NET-Quellcode

    1. stellenFaeeinfügen(559,49)


    Die beiden Integerwerte werden auch genau si in der schleife übergeben und lösen den Fehler aus.

    Cell schrieb:

    unter VB6 entwickelt
    Schreibst Du ein neuen VB.NET-Programm?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du arbeitest ja mit DataSets und TableAdapter - dies ist wunderbar wenn alles funktioniert - aber wenn ein unerklärlicher Fehler auftritt, dann kann es jenachdem schwierig werden den Grund zu finden.

    Ändere Dein Programm mal dahingehend ab, indem Du mit SQL INSERT arbeitest und schaue, ob da das Problem auch auftritt.
    Habe den Fehler selbst gefunden.

    Komischerweise werden beim import eines Datasets von Server zwar alle Beziehungen korrekt gesetzt aber die Fremdschlüsseleinschränkungen werden nicht mit übernommen bzw. die Relationen werden immer nur auf "Nur Beziehung" eingestellt.

    So kann es passieren das das Dataset dan Datensätze akzeptiert die der Server nicht akzeptiert. Wenn man dann ein Datensatz im Dataset landet der nicht konsistent ist (das Dataset akzeptiert ihn ja) hagelts beim Commiten immer Fehler.

    Desswegen funktioniert auch das Eintragen von Hand über die gleiche Routine denn da befindet sich ja kein Inkonsistenter Datensatz im DS

    Danke für die Hilfe