Autor Beitrag
Cyron
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP home SP2
C# (VS 2005 professional am DLR, VS2005 Academic Edition zu Hause)
BeitragVerfasst: Mi 30.08.06 10:44 
Hallo alle,
ich sitze hier im Praktikum am DLR und verzweifle mal wieder. Ich arbeite an einem etwas größeren Projekt obwohl ich noch einige Wissenslücken habe. Für Versuchszwecke hab ich ein ASP.Net Projekt gebastelt, was eine gaaanz simple Datenbank mit zwei Minitabellen enthält, wobei Tabelle 1 den PK von Tabelle 2 referenziert. Wenn ich jetzt einen Insert... ach Moment, ich muß noch etwas voraus schicken: Ich arbeite nicht mit direkt-SQL im Code, sondern über 'nen Data Access layer (TableAdapter).
Also, wenn jetzt einen Datensatz eingeben will, muß ich ja zuerst in Tabelle 2 schreiben damit dort die PK-ID des neuen Rows generiert wird. Um danach in Tabelle 1 zu schreiben, brauche ich ja die ID des neuen PK aus Tabelle 2 für die Referenzierung.
Wie zum Geier bekomme ich die ID des gerade geschriebenen Rows?
Hier mal zur Ansicht der Code, der Tabelle 2 befüllt. Was fehlt da noch?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public bool InsertTable2Zahl(int Parameter)
   {
      SimpleDatabase.Table2DataTable Table2Instanz = new SimpleDatabase.Table2DataTable();
      SimpleDatabase.Table2Row Table2ZeilenInstanz = Table2Instanz.NewTable2Row();
      Table2ZeilenInstanz.T2_Zahl = Parameter;
      Table2Instanz.AddTable2Row(Table2ZeilenInstanz);
      int rowsAffected = Adapter2.Update(Table2Instanz);
      return rowsAffected == 1;
   }
Cyron Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16

Win XP home SP2
C# (VS 2005 professional am DLR, VS2005 Academic Edition zu Hause)
BeitragVerfasst: Sa 02.09.06 21:09 
Ich hab's mittlerweile selber herausgefunden.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
#region Using Directives
// Für eine WinForms-Anwendung die Using Directives bitte entsprechend anpassen.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using SimpleDatabaseTableAdapters; // Nicht vergessen! :)
#endregion

[System.ComponentModel.DataObject]
public class BLL
{
   #region Properties
   private TableOneTableAdapter _tableOneAdapter = null;
   protected TableOneTableAdapter AdapterOne
  {
      get
      {
         if(_tableOneAdapter == null)
            _tableOneAdapter = new TableOneTableAdapter();
         return _tableOneAdapter;
      }
   }
   private TableTwoTableAdapter _tableTwoAdapter = null;
   protected TableTwoTableAdapter AdapterTwo
   {
      get
   {
         if(_tableTwoAdapter == null)
            _tableTwoAdapter = new TableTwoTableAdapter();
         return _tableTwoAdapter;
      }
  }    
   #endregion
 
   [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
   public bool InsertData(string text, int? zahl)
  {
      SimpleDatabase.TableTwoDataTable TableTwoInstance = new SimpleDatabase.TableTwoDataTable();
      SimpleDatabase.TableTwoRow TableTwoRowInstance = TableTwoInstance.NewTableTwoRow();

  if(zahl == null)
         TableTwoRowInstance.SetT2_ZahlNull();
      else
         TableTwoRowInstance.T2_Zahl = zahl.Value;
      TableTwoInstance.AddTableTwoRow(TableTwoRowInstance);
  int rowsAffected = AdapterTwo.Update(TableTwoInstance);
      // HACK: Ob bei rowsAffected=0 abgebrochen werden muß, hängt von der Datenbankstruktur ab.
      // In diesem Beispiel darf rowsAffected 0 sein.

  SimpleDatabase.TableOneDataTable TableOneInstance = new SimpleDatabase.TableOneDataTable();
      SimpleDatabase.TableOneRow TableOneRowInstance = TableOneInstance.NewTableOneRow();
      TableOneRowInstance.T1_Text = text;
      TableOneRowInstance.ID_T2 = (int)TableTwoRowInstance.ItemArray.GetValue(0); // Hier wird der PK ausgelesen.
      TableOneInstance.AddTableOneRow(TableOneRowInstance);
      rowsAffected = AdapterOne.Update(TableOneInstance);
      return rowsAffected == 1// liefert true zurück wenn genau ein Row befüllt wurde.
   }
}