Laden...

Datatable To XML

Erstellt von Elmo84 vor einem Jahr Letzter Beitrag vor einem Jahr 583 Views
E
Elmo84 Themenstarter:in
21 Beiträge seit 2023
vor einem Jahr
Datatable To XML

Hallo Community,

wieder einmal muss ich Anfänger mich mit einem für mich unlösbaren Problem wenden.
Derzeit schreibe ich ein Datatable in ein XML.
Den Code hierzu habe ich aus dem Netz. Funktioniert auch so weit ganz gut.


if (DataTable.Rows.Count != 0)
            {
                DataTable.WriteXml(@"C:\Users\ ... \_xml\"DataTable.xml");
            }

Dieser Code übernimmt allerdings leider keine leeren Tags.
Wie muss ich den Code anpassen um auch leere Tags ins XML zu übertragen?

LG elmo

16.841 Beiträge seit 2008
vor einem Jahr

Wie Du in den Docs sicherlich nachlesen kannst, beachtet WriteXml keine Null Values.
Alles, was Du geschrieben haben willst, muss im DataTable als Objekt oder Wert existieren.

WriteXml is halt kein Ersatz für eine echte Datenbank.

E
Elmo84 Themenstarter:in
21 Beiträge seit 2023
vor einem Jahr

Ja ich verstehe.

Das Problem ist, dass das Datatable durch eine DBF (FoxPro) Abfrage gefüttert wurde / wird.
Eine vorherige Abfrage habe ich eben durch einen Zwischenübertrag in eine XML lösen können.

Bei dieser Abfrage allerdings können NULL Werte vorkommen.
Ich versuche nun das DataTable direkt über BulkCopy zu übertragen, hier scheint aber eine
Column Lenght nicht zu stimmen. Ich verstehe nicht worauf ich bei DBF zu MSSQL Database Übertragung achten soll.
Hat jemand Erfahrung damit DBF in MSSQL zu importieren? Und kann mir Hinweise geben?

By the way Mr. Abt, ich danke für den wichtigen Hinweis.

LG elmo

T
2.224 Beiträge seit 2008
vor einem Jahr

Wenn die Column Lengt nicht passt, dann scheint dein DataTable eine Zeile mit zu langen Spalte zu haben.
Entsprechend musst du abgleichen welche Spalten du aus deinem DataTable du auf welche Spalte in der MS SQL DB mappen willst und wo diese zu lang sind.
Entweder musst du die Einträge kürzen oder diese vorab filtern.

Im Endeffekt also kein Hexenwerk.
Im einfachsten Fall kannst du die Zeilen per Select auch ermitteln.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

3.825 Beiträge seit 2006
vor einem Jahr

Eine Übertragung von einer in eine andere Datenbank würde ich nicht über den Umweg XML machen.

Ich lese und schreibe direkt, Voraussetzung ist natürlich dass beide Datenbank vom Rechner aus erreichbar sind.

So kann ich Typen umwandeln wenn nötig und auch Fehler abfangen, z.B. Spalte zu lang.

Gerade wenn die Übertragung öfter passiert ist schnell mal ein Feld verlängert in FoxPro.

Bei der Übertragung von SQL Server nach Oracle oder nach MySQL müssen z.B. Bit Typen oder Double Typen umgewandelt werden.


foreach (string tab in Tables())
{
...
	for (int i = 0; i < ds.Tables[tab].Rows.Count; i++)
	{
		...
		foreach (DataColumn col in ds.Tables[tab].Columns)
			foreach (DataColumn col2 in ds2.Tables[tab].Columns)
				if (col.ColumnName == col2.ColumnName)
					ds2.Tables[tab].Rows[0][col.ColumnName] = ConvertColumn(ds.Tables[tab].Rows[i][col.ColumnName]);
	}
}

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

E
Elmo84 Themenstarter:in
21 Beiträge seit 2023
vor einem Jahr

Hallo Bernd,

wie bereits erwähnt bin ich auf dem Gebiet ein totaler Noob.
Kannst du mir bitte erläutern wofür

ds / ds2 sowie
col / col 2 steht?

Ich wäre dir hierzu sehr verbunden.

LG elmo

16.841 Beiträge seit 2008
vor einem Jahr

Steht doch im Code, musst nur lesen.
ds = DataSet
col ist hier die Variable der Schleife: Using foreach with arrays - C# Programming Guide

Du hast halt direkt die Table, kannst also direkt über die Spalten gehen ohne vorher die Tables des DataSet zu holen.

wie bereits erwähnt bin ich auf dem Gebiet ein totaler Noob.

Wir haben auch ohne Wissen angefangen, aber DataTables und Co sind gut dokumentiert.
DataTable Class (System.Data)

E
Elmo84 Themenstarter:in
21 Beiträge seit 2023
vor einem Jahr

Entschuldigt die verzögerte Rückmeldung.
Ich war privat sehr eingenommen.

Ich danke euch allen für die Hilfe.
Ich habe dies nun so gelöst, dass ich die Größe des Feldes im Vorfeld
geprüft habe und die Tabelle entsprechend angepasst habe.
Da der Aufbau der Daten gleichbleibend ist.

LG elmo