Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DataSet Problem
invisible
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

DataSet Problem

beantworten | zitieren | melden

Hallo zusammen
Irgendwie wird mein DataSet immer wieder gelöscht/überschrieben. Wahrscheinlich bloss ein dummer Anfängerfehler, aber ich komm nicht darauf... Ich lade Tabelleninhalte in ComboBoxen aber nur bei der letzten "Befüllung" werden die Daten angezeigt.
        oDB.DB2conn();
        
        // ComboBoxen "Anrede" füllen
        DataSet oDSAnr = oDB.cmbBx_Load("SELECT * FROM ANREDE", "ANREDE");
        hanrede_cmbBx.DataSource = oDSAnr.Tables["ANREDE"];
        hanrede_cmbBx.DisplayMember = "ANR_BEZEICHNUNG";
        hanrede_cmbBx.ValueMember = "ANR_CODE";
        hanrede_cmbBx.DataSource = oDSAnr.Tables["ANREDE"];
        vanrede_cmbBx.DisplayMember = "ANR_BEZEICHNUNG";
        vanrede_cmbBx.ValueMember = "ANR_CODE";

        // ComboBox "Wunschcode" füllen
        DataSet oDSWun = oDB.cmbBx_Load("SELECT * FROM WUNSCHCODE", "WUNSCHCODE");
        hwun_cmbBx.DataSource = oDSWun.Tables["WUNSCHCODE"];
        hwun_cmbBx.DisplayMember = "WC_BEZEICHNUNG";
        hwun_cmbBx.ValueMember = "WC_CODE";
        public DataSet cmbBx_Load(string cmd, string table)
        {
          oDS.Clear();
          oDB2Conn.Close();
          oDB2Conn.Open();
          oDB2DaAdap = new DB2DataAdapter(cmd, oDB2Conn.ConnectionString);
          oDS = new DataSet();
          oDB2DaAdap.FillSchema(oDS, SchemaType.Source, table);
          oDB2DaAdap.Fill(oDS, table);
          return oDS;
        }

Danke für eine schnelle Antwort!
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

--> Verschoben nach ADO.NET.
private Nachricht | Beiträge des Benutzers
NoOneKnows
myCSharp.de - Member

Avatar #avatar-1526.gif


Dabei seit:
Beiträge: 333
Herkunft: Hannover

beantworten | zitieren | melden

Zitat
Original von invisible
        public DataSet cmbBx_Load(string cmd, string table)
        {
          oDS.Clear();
          oDB2Conn.Close();
          oDB2Conn.Open();
          oDB2DaAdap = new DB2DataAdapter(cmd, oDB2Conn.ConnectionString);
          oDS = new DataSet();
          oDB2DaAdap.FillSchema(oDS, SchemaType.Source, table);
          oDB2DaAdap.Fill(oDS, table);
          return oDS;
        }

Zeile 3 ist fatal. Da löschst du den Inhalt des Datasets wieder. Nicht böse sein, aber die Logik ist generell daneben, daher passieren auch solche Fehler. In der Funktion oben mußt du ein einzelnes DataSet und einen DataAdapter definieren. Das DataSet wird dann am Ende zurückgegeben. Etwa so:
        public DataSet cmbBx_Load(string cmd, string table)
        {
          DataSet dataSet = new DataSet();
          DB2DataAdapter adapter = new DB2DataAdapter(cmd, oDB2Conn.ConnectionString);

          // die beiden zeilen sind überflüssig, da du oben den ConnectionString benutzt und nich die COnnection selbst
          //oDB2Conn.Close();
          //oDB2Conn.Open();

          adapter.FillSchema(dataSet , SchemaType.Source, table);
          adapter.Fill(dataSet , table);
          return dataSet ;
        }
([bb]|[^b]{2})
private Nachricht | Beiträge des Benutzers
invisible
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Was soll ich sagen... X( du hast natürlich vollkommen recht. Sind meine ersten Gehversuche mit DataSet.
Das mit der Connection ist wirklich Blödsinn... Nur das mit [DataSet].Clear(); verstehe ich nicht ganz... was macht der Befehl den genau?

Jedenfalls funktioniert es jetzt Danke vielmals!!! Das hilft mir echt, da ich echt unter Zeitdruck stehe. In meinem Code wird es noch viele etwas verkorkste Dinge haben.

Gruss invisible

PS: sry dass ich es ins falsche Unterform gepostet habe...
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat
Original von invisible
Nur das mit [DataSet].Clear(); verstehe ich nicht ganz... was macht der Befehl den genau?
Zitat
Original aus der SDK Dokumentation
Entfernt alle Daten aus dem DataSet, indem alle Zeilen in sämtlichen Tabellen entfernt werden.
private Nachricht | Beiträge des Benutzers
invisible
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Hmm ich dachte, dass die vorher verwendeten Daten nicht mehr an den DataSet gebunden sind und ihn bereinige bevor ich die nächsten Daten einlese... das war wohl der Denkfehler...
private Nachricht | Beiträge des Benutzers
CarstenP
myCSharp.de - Member



Dabei seit:
Beiträge: 65
Herkunft: Berlin

off-topic @ n.o.k.

beantworten | zitieren | melden

klappt das mit dem "using" eigentlich bei database-connections auch so schmuck wie bei file-I/O?

und @ invisible: glaub mir, jeder, der in ADO.NET einsteigt, kriegt erstmal nen knoten in der birne, bis er nach und nach erkennt, wie elegant der entwurf eigentlich ist. vor allem lernt man eigentlich sehr schnell sehr viel bei dem thema und blickt nach ein paar experimenten recht flott durch. man sollte sich bloß nicht von der MSDN verwirren lassen, weil die so viele wege nach rom aufzeigt, dass man am ende nicht mehr weiß, welcher für welchen fall der richtige ist
/// <summary>
/// Signatur
/// </summary>
private Nachricht | Beiträge des Benutzers
NoOneKnows
myCSharp.de - Member

Avatar #avatar-1526.gif


Dabei seit:
Beiträge: 333
Herkunft: Hannover

beantworten | zitieren | melden

Zitat
Original von CarstenP
klappt das mit dem "using" eigentlich bei database-connections auch so schmuck wie bei file-I/O?
Ja, das geht für einige Data-Klassen wie Connections, Commands, Readers, oder Transactions. Eben alles was IDisposable einbindet
([bb]|[^b]{2})
private Nachricht | Beiträge des Benutzers
CarstenP
myCSharp.de - Member



Dabei seit:
Beiträge: 65
Herkunft: Berlin

off-topic zum 2. @ n.o.k.

beantworten | zitieren | melden

das heißt, wenn ich von ner klasse erbe oder eine erstelle, die IDisposable implementiert, geht das auch bei eigenen? klasse klasse
/// <summary>
/// Signatur
/// </summary>
private Nachricht | Beiträge des Benutzers
NoOneKnows
myCSharp.de - Member

Avatar #avatar-1526.gif


Dabei seit:
Beiträge: 333
Herkunft: Hannover

beantworten | zitieren | melden

Jups
Muß man natürlich gucken, obs wirklich sinnvoll ist Dispose einzubinden. Dies ist der Fall, wenn man externe Resourcen verwendet und freigeben muß oder wenn man andere IDiposable-Klassen einsetzt und dessen Resourcen auch freigeben möchte.
([bb]|[^b]{2})
private Nachricht | Beiträge des Benutzers