DataTable.ImportRow()



  • Hallo,

    vielleicht kann hier jemand einem mittlerweile verzweifelten C++-Freak, der mehr oder weniger .net-Neuling ist etwas beim Thema Datenbanken weiterhelfen?

    Am besten ich fange mal direkt mit dem Code an...

    try
                {
                    orclAdapter.Update(tblPositionen.GetChanges());
                }
                catch (DBConcurrencyException ex)
                {
                    DialogResult result;
                    DataRow row = ex.Row;
    
                    tblPositionen.RejectChanges();
    
                    Debug.WriteLine(ex.ToString());
                    result = MessageBox.Show(
                        "Beim aktualisieren der Daten ist ein Fehler aufgetreten. Der Datensatz\n" +
                        "wurde möglicherweise von einem anderen Benutzer geändert oder gelöscht.\n" +
                        "\nMöchten Sie Ihre Änderungen in einem neuen Datensatz speichern?",
                        "Update fehlgeschlagen",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Question);
    
                    if(result == DialogResult.Yes)
                    {
                        tblPositionen.ImportRow(row);
    
                        UpdatePositionen(tblPositionen);
                        return;
                    }
                }
    

    Mein Problem ist, 2 Benutzer arbeiten mitunter zur gleichen Zeit am selben Datensatz! Nach etlichen anderen Ansätzen kam ich dann auf die obige Idee im Falle eines Konflikts dem Benutzer einfach die Möglichkeit zu geben, seine Änderungen in einem neuen Datensatz zu speichern...

    nach langem experimentieren bin ich dann auf DataTable.ImportRow() gestossen, nur dummerweise verwende ich "nur" einen CommandBuilder und dieser erzeugt mir nun statts eines INSERT-Befehls natürlich ein UPDATE. Spielereien mit DataRow.SetAdded() o.ä. brachten mich leider auch nicht weiter, das einzige was mir momentan noch einfällt, wäre auf den CommandBuilder zu verzichten und aus den Daten meine SQL-Anweisung manuell zu erstellen. Bei obiger Tabelle ist das noch kein Problem, aber der Code ist eigentlich so eine Art "Schablone", die später auch für andere Tabellen verwendet werden soll. Das wäre dann wohl auch noch in Ordnung, wenn ich den Rest selbst programmieren würde; aber ich bin in ein paar Wochen hier weg und dann sollen u.a. Anfänger damit arbeiten!

    Ich hoffe einer von euch kann mir weiterhelfen und hat vielleicht eine ganz einfache Lösung für mich (die in den obigen Code passt)?

    LG, Sascha



  • Hi,

    wenn Du die Tabelle vorher klonst, dann könnte's klappen.

    DataTable clone=dt.clone();
    

    Ansonsten halt ne neue Row anlegen (DataTable.NewRow), zeug kopieren und einfügen.

    dt.Rows.Add(row);
    


  • Danke, hab die 2. Variante genommen und die Daten mittels DataRow.ItemArray kopiert:

    tblPositionen.Rows.Add(row.ItemArray);

    So hat es dann funktioniert 🙂


Anmelden zum Antworten