Daten aus einem DataSet in ein Objekt speichern

Reverent

Erfahrenes Mitglied
Hallo Leute,

ich habe eine Klasse 'Auto' und davon habe ich halt ein Objekt erzeugt 'bwm'
im diesem Objekt werden Daten gespeichert die zu dem Fahrzeug gehören z.b. Höchstgeschwindigkeit, Farbe usw und die Daten kommen aus einem DataSet.

Code:
public class MyClass
{
  MyEvent()
  {
    Auto bmw = new Auto();
    DataSet ds = new DataSet();
    dataAdapter.Fill(ds);

    bmw = bmw.DataSetValuesInObjekt(bmw, ds);
  }

Code:
public class Auto
{
  private string strFarbe;
  
  public Farbe
  {
     get { return strFarbe; }
     set { strFarbe = value; }
  }

  public Auto DataSetValuesInObjekt(Auto auto, DataSet ds)
  {  
    auto.Farbe = ds.Tables[0].Rows[0][2].ToString();
    return auto;
  }
}

Ich finde es einwenig unsauber oder so was in der Richtung, habt ihr da für vielleicht noch eine "bessere, schönere" Lösung.

Bis Dann
Markus
 
Zuletzt bearbeitet:

CSANecromancer

Erfahrenes Mitglied
Also ich weiß ehrlich gesagt nicht, was dir an dem Code nicht so gefällt. Mit "unsauber oder so was in der Richtung" lässt sich halt nicht viel anfangen.
 

Reverent

Erfahrenes Mitglied
Erstmal Danke für Eure Antworten.

Ich dachte nur!

Ich kann ja mit der Klasse Auto mehrer Objekt ( Wagen ) "herstellen" z.b. Audi, Opel, Fita u.s.w. die Funktion die ich da nun mit drin habe 'public Auto DataSetValuesInObjekt(Auto auto, DataSet ds)'
da bin ich am Überlegen ob ich die in eine einzelne Klasse pack z.b. Fabrik oder IFabrik und Auto erbt von der

Bis Dann
Markus
 

CSANecromancer

Erfahrenes Mitglied
Ah, jetzat!
Hmmm... ok. Das ist wirklich eine Überlegung wert. Da wäre mal die Frage: Sind die Fabrikdaten denn wirklich so wichtig für das Auto? Also im Moment kann ich mir nicht vorstellen, welchen Sinn z.B. die Fabrikanschrift in einem Autoobjekt haben sollte. Das muß aber nichts heissen, ich kenne ja den fachlichen Hintergrund nicht.

Aber wie wäre es denn mit einem entsprechenden Konstruktor? Einem, bei dem du die autorelevanten Daten (Lackierung, Fahrgestellnr. etc) gleich mitübergibst und somit das Auto sofort nicht nur instanziierst sondern auch gleich initialisierst? Dann müsstest du halt beim Erzeugen der jeweiligen Objekte Sorge tragen, daß die richtigen Daten übergeben werden, andererseits könntest du dir dann aber auch (mehr oder weniger) sicher sein: Wenn ein Auto da ist, dann hat es aber auch gleich die richtigen Werte. Bei der Gelegenheit liesse sich sicher auch die ein oder andere Verknüpfung zu Teildaten von Fabrikobjekten legen.

Aber ich würde aus diesen structs (also Teildatenmengen) nicht gleich sofort neue Klassen machen, sonst verzettelst du dich am Ende noch vor lauter Klassen.

Ist nur mal so in die Tüte gesprochen.
 

Reverent

Erfahrenes Mitglied
Danke eine gute Idee!

Ich übergebe dem Konstruktor das DataSet und schon habe ich ein fertiges Auto und brauche die Funktion nicht mehr.
Ich versuche es so mal!
Ich glaube ich brauche auch kein DataSet, die Daten kommen aus einer Datenbank, ich könnte es ja noch besser mit dem DataReader machen!
Dann noch das letzte Problem:
Ich habe da noch 2 weiterte Tabellen,
1 Tabelle ist 'Auto'
id
farbe

2 Tabelle ist 'AutoReifen'
id
idAuto
idReifen

3 Tabelle ist 'Reifen'
id
groesse

Jetzt muß ich nur noch die Reifengrößen für das jeweilige Auto bekommen!
ich dachte da an eine ArrayList in der Klasse Auto die ich Reifen nenne, aber wie fülle ich diese am besten.

Ich hoffe du hast mich verstanden!
Bis Dann
Markus
 

CSANecromancer

Erfahrenes Mitglied
Das sieht erstmal nach einem verschachtelten SQL aus. Irgendwie was in der Richtung

Code:
Select * from Reifen
where ID =
 (Select r.ID from a Auto, r AutoReifen
  where a.ID = r.ID);

Irgendwie so, da können dir sicher die Datenbankcracks weiterhelfen, ich breche mir immer halb einen ab bei so etwas. :)

Für das Ergebnis würde ich mir zur Not einfach ein TRect schnappen und auf das Auto abbilden. TRect kann ja 4 Integerwerte halten, das wären dann glatt 4 IDs für die einzelnen Reifen des Autos. ;)
 

Reverent

Erfahrenes Mitglied
Hallo CSANecromancer,

die passenden Reifen zu dem Auto aus der Datenbank zubekommen ist kein Problem, aber diese Reifenliste in meine 'Auto' Klasse unterzubringen schon ehr.

ich hatte mir sowas vorgestellt:
Code:
public class Auto
{
  private string strFarbe;
  public ArrayList alReifen;
  
  public Farbe
  {
     get { return strFarbe; }
     set { strFarbe = value; }
  }
hast du da eine Idee?
Bis Dann
Markus
 

CSANecromancer

Erfahrenes Mitglied
Ideen schon, nur ob ich die Syntax so schnell aus dem Finger kriege...
Ich bastel zwar derzeit in .net, bin aber etwas aus der C++-/C#-Syntax draußen.

Code:
public class Auto
{
  private string strFarbe;
  
  private StringList alReifen;
  
  public Farbe
  {
     get { return strFarbe; }
     set { strFarbe = value; }
  }

  public String Reifen(int Welcher)
  {
    return alReifen.Strings[Integer];
  }
}

Je nach Geschmack kannst du noch eine Enum rtType basteln, wo du verschiedene Reifentypen definiert und diese als Parameter und Rückgabewert verwenden, ist meiner Meinung nach Geschmackssache.

Und die StringList ist auch relativ vielseitig, da sie nicht nur Strings beinhalten kann, sondern (zumindest so weit ich weiß) auch dazu gehörende Objekte. So könntest du in alReifen also als Strings die Textbezeichnungen der Reifen speichern und im dazu gehörenden Objekt ein ganzes Reifenobjekt mit allem Drum und Dran.

Meinst du so etwas?
 

Neue Beiträge