Laden...

DataSet Problem

Erstellt von invisible vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.239 Views
I
invisible Themenstarter:in
48 Beiträge seit 2004
vor 19 Jahren
DataSet Problem

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!

N
4.644 Beiträge seit 2004
vor 19 Jahren

--> Verschoben nach ADO.NET.

333 Beiträge seit 2004
vor 19 Jahren

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})

I
invisible Themenstarter:in
48 Beiträge seit 2004
vor 19 Jahren

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...

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von invisible
Nur das mit [DataSet].Clear(); verstehe ich nicht ganz... was macht der Befehl den genau?

Original aus der SDK Dokumentation
Entfernt alle Daten aus dem DataSet, indem alle Zeilen in sämtlichen Tabellen entfernt werden.

I
invisible Themenstarter:in
48 Beiträge seit 2004
vor 19 Jahren

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... 😉

C
65 Beiträge seit 2004
vor 19 Jahren
off-topic @ n.o.k.

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>

333 Beiträge seit 2004
vor 19 Jahren

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})

C
65 Beiträge seit 2004
vor 19 Jahren
off-topic zum 2. @ n.o.k.

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>

333 Beiträge seit 2004
vor 19 Jahren

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})