Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 06.04.15 20:23 
Hi,
Ich möchte ein DataTable in einer DB ablegen. Ich würde jetzt jede Zeile durchlaufen und diese speichern.

Ist dies korrekt oder gibt's ne andere Möglichkeit wie man sowas macht.

Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 06.04.15 20:34 
Stichworte sind DataAdapter bzw. TableAdapter. Von beidem sollte es passende Überladungen auch von MySql geben.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 06.04.15 21:06 
Ok.
Also nicht jede Zeile einzeln.

Suche mir was mit den stchworten raus.
Danke
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 10.04.15 10:57 
Hallo,
ich nochmal.
Leider finde ich irgendwie nur Beispiele wie ich Daten aus einer Datenbank in einem DataAdapter speicher.
Aber nicht wie ich ein vorhandenes DataTable in MySQL ablege ohne jede Zeile zu durchlaufen.

Habt ihr eventuell ein Paar Links?

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 10.04.15 11:38 
Aus der Msdn DataAdapter.Update

Im Beispiel wird ein OleDbDataAdapter verwendet aber deine MySql Bibliothek sollte eine entsprechende MySQLDataAdapter Komponente beinhalten.
Das Beispiel verwendet auch eine OleDbCommandBuilder Komponente um die Insert, Update, Delete Befehle (Templates mit Parametern die später durch die konkreten Werte ersetzt werden) die der DataAdapter verwenden soll zu erzeugen. Die kann man aber genauso manuell erzeugen wenn man irgendwelche Besonderheiten in den Kommandos berücksichtigen muß. Für MySql sollte es aber auch eine entsprechende CommandBuilder Klasse geben.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Di 28.04.15 12:33 
Hallo nochmal,
also ich habe mich jetzt mal näher versucht damit zu beschägtigen ein DataTable über den DataAdapter in einer Datenbank zu speichern.
Nicht der Datenbank aus der es ausgelesen wurde. Soll in eine andere Tabelle der Datenbank.

Leider komme ich nicht zu Rande.
Könnte mir jemand mit ein wenig Quellcode aushelfen?

Vielen Dank

VG
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 28.04.15 12:42 
Eine DataTable hält den Veränderungszustand der Daten gegenüber der Quelle nach. Wenn du zwischen Datenbanken Daten verschieben willst (eine DataPump) ist das DatTable verhalten kontraproduktiv und damit eine DataTable eher ungeeignet. Wenn man Daten zwischen Datanbanken verschieben will sollte die Datenbank selbst (zumindest wenn Ziel und Quelle den gleichen Hersteller haben) entsprechende Werkzeuge mitbringen. Das ist definitiv schneller als wenn man noch einen 3.ten (irgendeine Anwendung) dazwischen schaltet.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 29.04.15 12:39 
Hallo Ralf,
ich möchte das der Benutzer Daten in einem DataGridView gezeigt bekommt, die theoretisch zur Auswahl stehen.
Hier soll er sich bestimmte Datensätze raus filtern können, die er anschließend noch bearbeiten kann.
Der bearbeite Stand soll dann weg gespeichert werden und in der Ausgangstabelle wird der Ursprungsstand behalten.

Soll ich dann doch lieber jede Zeile des veränderten Stands in eine Klasse packen und diese in die neue Tabelle schreiben?
Oder lieber noch ganz anders?

Danke
ebk
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 14.08.15 00:52 
nach Deinem letzten Posting würde ich anehmen, dass der User records bearbeitet, die per SELECt aus einer DB kommen und im Datagrid angeziegt werden(also eben keine leere Datatable für das dgv un der User gibt da was ein)
Falls ja musst Du dich nicht darüm kümmern wieviel Records geändert wurden, es sei denn, dein sql-statment bezieht sich auf mehr als ein Tabelle.
Für denn Fall, dass du doch abchekcen willst welche Records geändert wurden , dann so:
ausblenden Quelltext
1:
DataViewRowState drvs = DataViewRowState.Added | DataViewRowState.Deleted | DataViewRowState.ModifiedCurrent;					


Dann via for Schleife

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
foreach (DataRow row in dt.Select("", "", drvs))                  
                  {
                switch (row.RowState) 
        
                        {
                  case DataRowState.Modified:
                    booModified = true;
                    break;
                  case DataRowState.Added:
                    booINSERT = true;
                    break;
                  case DataRowState.Deleted:
                    booDELETE = true;
                    break;
                    }
                        break; // switch
                  }


gruss eric