Announcement

Collapse
No announcement yet.

DataSet mit mehreren Tabellen füllen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataSet mit mehreren Tabellen füllen

    Hallo Zusammen

    Ich bin noch ziemlich neu auf diesem Gebiet und habe momentan folgendes Problem:

    Ich möchte eine DataSet mit mehreren Tabellen füllen. Eine Tabelle füllen und z.B. in einem DataGrid anzeigen ist kein Problem. Wie muss ich z.B. eine SQL-Abfrage gestalten? geht das so? (Die Tabellen haben eine 1:n Beziehung)
    SELECT * FROM Tabelle1, Tabelle2 Where ....
    oder muss ich jede Tabelle im DataSet einzeln Füllen?

    Vielen Dank!

    Michael

  • #2
    ich habe die bis jetzt immer einzeln gefüllt! dabei musst du aufpassen, dass du, falls du relations im dataset hast, erst die master-tabellen füllst.

    steffe

    Comment


    • #3
      Aha, auch eine Idee!

      Ziel ist es am Ende ein DataGrid zu füllen, wo aus beiden Tabellen Daten drin stehen... Wie ich das hinkriegen soll weis ich nicht...

      Hmm, könntest du mier da ein BeispielCode schicken? Währe sehr Dankbar

      Comment


      • #4
        genau damit spiele ich auch gerade herum! ist noch nicht so weit! gefällt mir alles noch nicht!

        steffe

        Comment


        • #5
          Hallo,

          >..oder muss ich jede Tabelle im DataSet einzeln Füllen?

          jede Tabelle wird über den zuständigen DataAdapter einzeln ins DataSet geladen. Wenn eine <b>DataRelation</b> zwischen den zwei DataTable-Instanzen im DataSet besteht, liefert die Funktion <b>Child</b> die Datenmenge der abhängigen Tabelle für den ausgewählten Master-Datensatz zurück. Im Gegensatz dazu liefert die Funktion <b>Parent</b> den Inhalt der angegebenen Spalte der übergeordneten Eltern-Tabelle zurück. Wenn es nur eine einzige DataRelation-Instanz im DataSet gibt, muss der Name dieser Beziehung nicht angegeben werden, zur Sicherheit übergebe ich aber immer den Relation-Namen.
          <br><br>
          &gt;..Ziel ist es am Ende ein DataGrid zu füllen, wo aus beiden Tabellen Daten drin stehen..
          <br><br>
          Das folgende Beispiel demonstriert dies, dort enthält im typisierten DataSet die Tabelle ANR die Zeichenketten mit den Anreden (Herr, Frau, Firma) und die Tabelle KDN speichert jeweils nur den Fremdschlüsselwert für die Anrede. Im DataGrid wird aber trotzdem die Spalte Anrede der Tabelle ANR angezeigt, obwohl das DataGrid nur mit der Tabelle KDN verbunden ist. Der Inhalt dieser erst zur Laufzeit zusätzlich hinzugefügten Spalte wird über die Funktion <b>Parent(<i>ANR_KDN</i>).<i>Anrede</i></b> ermittelt. Dabei ist <i>ANR_KDN</i> der Name der DataRelation-Instanz, während Anrede die Spalte der übergeordneten Tabelle festlegt, deren Inhalt angezeigt werden soll:
          <pre>
          dataSetRelationJOIN1.EnforceConstraints = false;
          SqlDataAdapter1.Fill(dataSetRelationJOIN1);
          SqlDataAdapter2.Fill(dataSetRelationJOIN1);
          dataSetRelationJOIN1.EnforceConstraints = true;
          dataSetRelationJOIN1.Tables["KDN"].Columns.Add("Anrede", typeof(string), "Parent(ANR_KDN).Anrede");
          </pre>
          Falls VB.NET bevorzugt wird, sieht die wesentliche Programmzeile so aus:
          <pre>
          DataSetRelationJOIN1.Tables("KDN").Columns.Add("An rede", _
          GetType(String), "Parent(ANR_KDN).Anrede")
          </pre&gt

          Comment


          • #6
            he, das funktioniert gut! :-) hab das sonst immer im item_databound-event mit findbykey gemacht...aber dann brauche ich auch die relations im dataset nicht.

            hab das mit der northwind mal ausprobiert!

            <pre>
            this.northwind1.EnforceConstraints = false;
            System.Data.OleDb.OleDbDataAdapter daCategories = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Categories", this.oleDbConnection1);
            daCategories.Fill(this.northwind1.Categories);
            System.Data.OleDb.OleDbDataAdapter daProducts = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Products", this.oleDbConnection1);
            daProducts.Fill(this.northwind1.Products);
            System.Data.OleDb.OleDbDataAdapter daSuppliers = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Suppliers", this.oleDbConnection1);
            daSuppliers.Fill(this.northwind1.Suppliers);
            this.northwind1.EnforceConstraints = true;
            this.northwind1.Tables["Products"].Columns.Add("SupplierName",typeof(string),"Parent (SuppliersProducts).CompanyName");
            this.northwind1.Tables["Products"].Columns.Add("CategoryName",typeof(string),"Parent (CategoriesProducts).CategoryName");

            </pre>

            danke, andreas!

            steffe

            Comment

            Working...
            X