Laden...

2 Tabellen in einem Dataset mit CommandBuilder

Erstellt von BerndFfm vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.825 Views
BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor 18 Jahren
2 Tabellen in einem Dataset mit CommandBuilder

Hallo Leute,

zuerst einmal finde ich dieses Forum echt Klasse. Ich habe aus den Beiträgen schon viele Ideen schöpfen können.

Nun komme ich nicht weiter, und weder im Forum noch anderswo kann ich eine Lösung dazu finden.

Ich lade aus einer externen Datei mehrere Datensätze, die in verschiedene Tabellen gespeichert werden müssen. Da ich vorher nicht weiss welche Tabelle füge ich mehrere Tabellen dem Dataset hinzu und erzeuge eine Tabellenzeile zu der jeweiligen Tabelle :

		conn = new SqlConnection(connStr);
	ds = new DataSet();
	da = new SqlDataAdapter( sqlstr, conn);
	cb = new SqlCommandBuilder(da);
	DataRow rw = null;
	try
	{
		conn.Open();
		ds.Clear();

		da.SelectCommand.CommandText = "SELECT * FROM table1";
		ds.Tables.Add("table1");
		count = da.Fill(ds,"table1");

		da.SelectCommand.CommandText = "SELECT * FROM table2";
		//cb.RefreshSchema();
		ds.Tables.Add("table2");
		count = da.Fill(ds, "table2");

		da.SelectCommand.CommandText = "SELECT * FROM table3";
		ds.Tables.Add("table3");
		count = da.Fill(ds, "table3");
	}
	catch (Exception ex)
	{
	}
	conn.Close();
	
	while (...)
	{
		// Datensatzanfang, dat = Name der Tabelle
		rw = ds.Tables[dat].NewRow();
		
		// Felder zuordnen
		rw[fname1] = str1;
		rw[fname2] = str2;
				

		// Datensatz einfügen
		ds.Tables[dat].Rows.Add(rw);
		try
		{
			conn.Open();
			count = da.Update(ds, dat);
		}
		catch (Exception ex)
		{
			MessageBox.Show("Datenbank-Fehler : " + ex.Message);
		}
	}


Beim Ausführen des da-Update-Befehls bekomme ich die Fehlermeldung DataColumn 'dat3_spalte1' in der DataTable 'table1' für SourceColumn 'dat3_spalte1' ist nicht vorhanden"

Ich habe inzwischen festgestellt, dass es am ComandBuilder liegt, der seien Insert-Befehl nur für eine Tabelle erstellt hat.
Auch Probieren mit cb.RefreshSchema() und Anlegen von mehreren Comandbuildern hat keinen Erfolg gebracht.

An welcher Stelle muss ich denn eigentlich den Commandbuilder erstellen ?

Wie kann ich Commandbuilder für mehrere Tabellen erstellen ? Erkennt er dann welchen Insert-Befehl er benutzen muss ?

Danke für eure Bemühungen,

Grüße Bernd

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

4.221 Beiträge seit 2005
vor 18 Jahren

Du brauchst pro Tabelle einen DataAdapter

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor 18 Jahren

Hi,

ich habs selbst rausgefunden :

Vor dem Befehl da.Update habe ich eingefügt :

cb.Dispose();
da.SelectCommand.CommandText = "SELECT * FROM "+dat;
cb = new SqlCommandBuilder(da);

Jetzt wird vor jedem Einfügen eines neues Datensatzes der Insert-String neu aufgebaut. Da dies nur im Hauptpeicher stattfindet sollte das auch schnell gehen.

Programmierhans : Da die Routine mit allen Datenbanken funktionieren soll wollte ich die Verwendung von mehreren Datasets und DataAdapters verhindern. Es können über 100 Tabellen gleichzeitig sein die da angesprochen werden.

Grüße Bernd

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