2016-07-31 23 views
0

Ich habe eine zwei identische Datentabellen in meinem Projekt, One ist Bestellungen und die andere ist eine Vorlage Datentabelle. (IE. Der Benutzer kann wählen Sie eine Vorlage, wenn eine neue Zeile in der ursprünglichen Tabelle erstellen)Kopieren einer DataRow in eine andere Tabelle (vb.net/mysql)

Eine Schaltfläche Vorlage speichern läuft:

Public Shared Sub AddPO_as_Template(Name As String, DR As DataRow) 
    Dim ds As New SomeDataSet 
    Dim ta As New SomeDataSetDataSetTableAdapters.PurchaseOrderTemplatesTableAdapter 
    Try 
     DR("Name") = Name 
     ds.PurchaseOrderTemplates.ImportRow(DR) 
     ta.Update(ds) 
    Catch ex As Exception 
     CommonRoutines.ShowExceptionDialog("Could not add the Template, an error occured.", ex.Message) 
    End Try 
End Sub 

Dieser besondere Code wirft eine Gleichzeitigkeit Verletzung. Ich nehme an, dass dies geschieht, weil die ID-Spalte automatisch erhöht wird und ich die ID der ursprünglichen Zeile verwende.

Jetzt; Die ID in der zweiten Tabelle (PurchaseOrderTemplates) ist überhaupt nicht wichtig, also kann es alles sein. Ich habe versucht, -1, dbnull, "", etc .... die DB trowing Ausnahmen auf dem Update-Befehl.

Wie kann ich die ID-Spalte zurücksetzen, so dass es nur als normal hinzugefügt wird? (Ich weiß, dass ich eine NewRow schaffen könnte und bewegen alle Spalten accross, aber dies scheint den langen Weg.)

Dank

EDIT: Kopieren Sie die Zeilen (über .itemarray) funktioniert gut, aber ich brauche zu bekommen der Autoinkrementwert aus der Tabelle, um Parallelitätsverletzungen zu vermeiden.

Edit2: Also ich habe es funktioniert wie in der Antwort unten, aber ich würde immer noch gerne wissen, wie Import Zeile wie diese zu bekommen.

Antwort

0

Hinzufügen der Zeile wie folgt funktioniert.

Die MySQL-Datenbank ignoriert den Wert in der ID-Spalte und legt nur ihren eigenen automatischen Inkrementwert fest.