Relation zwischen 2 Tabellen (DataSet)
-
Hallo zusammen,
kurz vor weg: bin ein Anfänger in C#.
Problem:
Ich habe eine Tabelle Person(Id,Name,Vorname)
und eine Tabelle Task(Id, Start, Ende, Dauer). Diese möchte ich nun mit einer Tabelle 'Relation' verbinden.
Ich müsste also die ID von Person mit der ID von Task als Relation darstellen. Leider weisß ich nicht, wie ich da vorgehen soll.Hier der Code: Person-Tabelle
protected void CreateUpdatePerson() { PrintMsg(null, "Create new Person"); m_DataTablePerson = new DataTable(m_sTablePerson); // --- Create Columns m_DataTablePerson.Columns.Add(_sColID); m_DataTablePerson.Columns.Add(_sColName); m_DataTablePerson.Columns.Add(_sColVorname); // ---Add DataTable to DataSet m_TheDataSet.Tables.Add(m_DataTablePerson); PrintMsg(null, "New Person Created"); // -------------------------------------------------------------------------- PrintMsg(null, "Insert Person"); // --- Create Row DataRow drNewRow = m_DataTablePerson.NewRow(); DataRow drNewRow1 = m_DataTablePerson.NewRow(); // --- fill rows drNewRow[_sColID] = 1; drNewRow[_sColName] = "Meyer"; drNewRow[_sColVorname] = "Klaus"; drNewRow1[_sColID] = 2; drNewRow1[_sColName] = "Otto"; drNewRow1[_sColVorname] = "Maus"; // --- Add rows to Table m_DataTablePerson.Rows.Add(drNewRow); m_DataTablePerson.Rows.Add(drNewRow1); PrintMsg(null, "Person inserted"); }
Hier der Code: Task-Tabelle
protected void CreateUpdateTask() { PrintMsg(null, "Create new Task"); m_DataTableTask = new DataTable(m_sTableTask); // --- Create Columns m_DataTableTask.Columns.Add(_sColID); m_DataTableTask.Columns.Add(_sColStart); m_DataTableTask.Columns.Add(_sColEnd); m_DataTableTask.Columns.Add(_sColDuration); // --- Add DataTable to DataSet m_TheDataSet.Tables.Add(m_DataTableTask); PrintMsg(null, "New Task created"); // ------------------------------------------------------------------ PrintMsg(null, "Update data"); //--- Create Row DataRow drNewRow = m_DataTableTask.NewRow(); DataRow drNewRow1 = m_DataTableTask.NewRow(); //--- fill rows drNewRow[_sColID] = 1; drNewRow[_sColStart] = System.DateTime.Now; drNewRow[_sColEnd] = System.DateTime.Now; drNewRow[_sColDuration] = 20; drNewRow1[_sColID] = 2; drNewRow1[_sColStart] = System.DateTime.Now; drNewRow1[_sColEnd] = System.DateTime.Now; drNewRow1[_sColDuration] = 10; //--- Add rows to Table m_DataTableTask.Rows.Add(drNewRow); m_DataTableTask.Rows.Add(drNewRow1); PrintMsg(null, "Data updated"); }
Nun stehe ich hier:
protected void BuildRelation() { PrintMsg(null, "...Create new Relation"); if (m_TheDataSet == null) return; m_DataTableRelation = new DataTable(m_sTableRelation); /* // --- Create Columns UNSICHER OB ICH DIE COLUMNS BRAUCHE?!?! m_DataTableRelation.Columns.Add(_sColID); m_DataTableRelation.Columns.Add(_sColFromId); m_DataTableRelation.Columns.Add(_sColFromType); m_DataTableRelation.Columns.Add(_sColToId); m_DataTableRelation.Columns.Add(_sColToType); */ EDIT: // --- get relations string sWhere = string.Format("{0}={1}", m_DataTableTask.Columns[_sColID], m_DataTablePerson.Columns[_sColID]); DataRow[] aDrRelation = m_DataTableRelation.Select(sWhere); if (aDrRelation == null || aDrRelation.Length == 0) return; } // Vielleicht ist dieser Ansatz richtig??
Bei der Methode: BuildRelation komme ich leider nicht weiter, hoffe Ihr könnt mir da helfen:).
Gruß
Manda
-
Ich denke ich habe es nun doch hinbekommen (wenns denn richtig ist:)), falls ihr das noch sehen wollt:
protected void BuildRelation() { PrintMsg(null, "...Create new Relation"); if (m_TheDataSet == null) return; /* // --- get relations string sWhere = string.Format("{0}={1}", m_DataTableTask.Columns[_sColID], m_DataTablePerson.Columns[_sColID]); DataRow[] aDrRelation = m_DataTableRelation.Select(sWhere); if (aDrRelation == null || aDrRelation.Length == 0) return; */ // --- Create DataRelation m_DataRelation = new DataRelation("Person-Task", m_TheDataSet.Tables[m_sTableTask].Columns[_sColID], m_TheDataSet.Tables[m_sTablePerson].Columns[_sColID] ); m_TheDataSet.Relations.Add(m_DataRelation); PrintMsg(null, "Person-Task"); PrintMsg(null, "New Relation created"); }
Gruß
MandaPS: Wenn da was falsch sein sollte, bitte korrigieren!
-
Ich selbst arbeite nicht mit DataSets aber vom Prinzip her solltest Du bei SQL prüfen, was sinnvoller ist:
1. Eine neue Tabelle, die die IDs der beiden Tabellen enthalten. Ist sinnvoll, wenn du 1:n oder n:m Relationen hast
2. Die ID der uu verknüpfenden Tabelle in die Haupttabelle als Fremdschlüssel einfügen. IN deinem beispiel in deine Tabelle Person eine neue Spalte, dort ID_Task oder so eintragen und dort speichern. Ist sinnvoll, wenn es zum Datensatz PErson optional genau einen Eintrag in der Tabelle Task hat.
Grüße Solick
-
Hallo solick,
Danke für den Hinweis. Ich mach mir mal ein paar Gedanken darüber.
Gruß
Manda