Autor Beitrag
Atti
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 26.10.09 17:21 
Hallo Zusammen,

ich versuche mich gerade an einer Oracle Datenbank mit C#.
Durch einen Klick wird ein Artikel aus einem DataGridView in ein anderes "kopiert". Das zweite DataGridView verweist auf eine leere Tabelle, in der nun der neu eingefügte Artikel gespeichert werden soll - nur irgendwie scheitere ich gerade daran.

Das einfügen funktioniert soweit wunderbar, nur bleibt der Updatebefehl irgendwie ohne jegliche Wirkung *seufzt*.
Hoffe ihr könnt mir helfen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if (myRowView != null)
            {
                pSelectedArticle = (DataSet.ARTIKELRow)myRowView.Row;
                this.DataSetTest.Bestellkorb.AddBestellkorbRow(pSelectedArticle.Artikelrow, 5555, folgen weitere Eigenschaften...);
            }
            else
            {
                MessageBox.Show("Keinen Artikel ausgewählt!""Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


bei einem Button habe ich noch "da.Update(this.DataSetTest.Tables[0]);" hinterlegt nur erhalte ich keinen Fehler beim Klick, einfach nichts.

Kann es sein, dass der Adapter (da) durch das "addRow" vll. nicht mitbekommen hat, dass sich was im zweiten DataGridView getan hat?

Vielen Dank
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 26.10.09 19:57 
Deine DB-Konfiguration habe ich wahrscheinlich noch nicht ganz verstanden, aber wenn du zwei Tabellen mit exakt gleichen Columns hast, dann wäre das auf jeden Fall ein schwerer Verstoß gegen die Normalisierung.

Zum Problem: Warum nicht DataSetTest.Bestellkorb statt Tables[0]? Was sagt DataSetTest.GetChanges() dazu?

_________________
>λ=
Atti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 27.10.09 09:21 
Oh hätte ich vll. dazu sagen sollen:

Also die Tabellen sind nicht gleich, ich möchte aus dem einen DataGridView (Artikel) in einen Bestellkorb einfügen (was ja auch funktioniert). Nur eben das abspeichern nicht.

Habe jetzt mal DataSetTest.Bestellkorb gemacht und nun erscheint "Aktualisieren erfordert einen gültigen InsertCommand, wenn eine DataRow-Auflistung mit neuen Zeilen weitergegeben wird."

Muss ich mich wohl noch einlesen, da das mit dem Tables[0] so in einer Oracle-Anleitung für C# stand, habe ich das mal so blind übernommen.

Wie stelle ich das so grob mit dem Insert-Befehl an? Weil eigentlich soll er genau die AddRow auch so in die DB übernehmen.

Nochmals Danke für Tipps!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 27.10.09 10:10 
Hallo,

generell empfehle ich dir, bei der ganzen Problembeschreibung auf den Bezug zum DataGridView zu verzichten. Es geht ausschließlich um die Handhabung der Daten; die GUI-Anbindung ist dabei völlig nebensächlich.

user profile iconAtti hat folgendes geschrieben Zum zitierten Posting springen:
Wie stelle ich das so grob mit dem Insert-Befehl an? Weil eigentlich soll er genau die AddRow auch so in die DB übernehmen.

Durch AddRow landet die neue Zeile in der betreffenden DataTable und hat automatisch den DataRowState.Added, soll also beim nächsten DbDataAdapter.Update (oder vergleichbarem TableAdapter-Befehl) gespeichert werden; dazu wird eben ein passender InsertCommand benötigt.

Diesen kannst du auf mindestens zwei Wegen erzeugen:
1. Schreibe ihn manuell. Dann solltest du aber unbedingt darauf achten, Parameter zu benutzen; siehe z.B. [Artikelserie] Parameter von SQL Befehlen mit speziellen Hinweisen auch auf Oracle und TableAdapter.
2. Lasse ihn von einem CommandBuilder auf der Grundlage eines passenden SelectCommand erstellen.

Wahrscheinlich geht Punkt 2 auch mit Hilfe des TableAdapters, oder im TableAdapter steht "irgendwo" schon ein passender InsertCommand. (Aber dazu habe ich keine Ahnung.)

Gruß Jürgen
Atti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 27.10.09 10:39 
Okay danke sehr, werde mich mal einlesen!
Atti Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 29.10.09 15:34 
Durch den von dir gezeigten Thread habe ich es nun über Parameter gelöst - vielen Dank für den Link, hab es irgenwie über die Suche nicht gefunden!