Announcement

Collapse
No announcement yet.

Typisierte DataSet's / Tabellen mit Beziehungen auf sich selbst

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

  • Typisierte DataSet's / Tabellen mit Beziehungen auf sich selbst

    Hallo,

    kann mir jemand bei folgendem Problem helfen:
    Ich habe ein typisiertes DataSet mit einer Tabelle die ein ForeignKey Feld mit einem "Zeiger" auf einen Eintrag (PK) in eben dieser Tabelle enthält.
    Das Feld soll aber auch 'Null' sein dürfen. Als Datentype habe ich bei PK und FK jeweils Integer gewählt.

    Das Problem ist nun ... wenn ich die Beziehung zwischen den beiden Feldern (und der Tabelle) definiere und die DataSet Klasse erzeugen lasse, habe ich später das Problem, das ich keine neue TypedDataRow erzeugen kann, die im FK Feld eine null hat. Die entsprechende Methode zum erzeugen einer neue DataRow kann mit einem übergebenen null nicht umgehen.

    Habe ich etwas übersehen ?
    Der einzige weg den ich gefunden habe ist die Option "nur Fremdschlüsseleinstellungen erstellen" zu aktivieren, dann habe ich aber die gesamten Methoden für den Zugriff auf die Typisierten ChildRows nicht zur Verfügung !

    Wär schön wenn jemand einen Tip hätte.

    Gruß

  • #2
    es gibt oft probleme beim zurückschreiben von abfagen. ich nehem dann immer den currentleymanager und schreib die tabellenwerte pro tabelle zurück geht ganz gut vieleicht teilweise aufwendig aber funktioniert. ne andere möglichkeit ist die direkte speicherung als xml datei (das hab ich selber allerdings noch nicht ausprobiert müsste aber gehen) einfach über .readxml einlesen dann hängen die datensätze direkt zusammen damit kann man sich dann von der rationalen db verabschieden.

    mfg
    benedik

    Comment


    • #3
      Hallo,

      >Wär schön wenn jemand einen Tip hätte.

      das typsierte DataSet muss <b>nicht</b> zurückgebaut werden, da immer noch der Plan B zur Verfügung steht. Angenommen, die Datenbanktabelle hat die folgende Struktur (die Spalte <i>fkid</i> ist der Fremdschlüssel auf <i>id</i>, der auch NULL sein darf):

      <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>TestTbl</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; id&nbsp;&nbsp; <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">NOT NULL IDENTITY PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; fkid <span style="color: blue;">INT </span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">NULL FOREIGN KEY REFERENCES </span>TestTbl(id),</p><p style="margin: 0px;">&nbsp; wert <span style="color: blue;">NVARCHAR</span>(9) <span style="color: blue;">NOT NULL</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p></div>

      In diesem Fall sieht der Plan B wie folgt aus:

      <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> buttonTest_Click(<span style="color: blue;">object</span> sender, <span style="color: teal;">EventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Exception "Object reference not set to an instance of an object" </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tempdbDataSet.TestTbl.AddTestTblRow(<span style="color: blue;">null</span>, <span style="color: maroon;">"Test 4"</span>);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> buttonTest2_Click(<span style="color: blue;">object</span> sender, <span style="color: teal;">EventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Das funktioniert :-)</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tempdbDataSet.TestTbl.Rows.Add(<span style="color: blue;">new</span> <span style="color: teal;">Object</span>[] { <span style="color: blue;">null</span>, <span style="color: teal;">DBNull</span>.Value, <span style="color: maroon;">"Test 5"</span> });</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p></div&gt

      Comment

      Working...
      X