Hallo zusammen
Ich habe ein allgemeines Master Detail Problem, welches über 3 Ebenen geht.
ZIEL: Ich will NEUE Daten hinzufügen und erst ganz am Ende über meinen TableAdapter SPEICHERN/UPDATEN, sodass alle ForeignKey Abhängigkeiten aufgelöst werden.
Ich schilder ganz kurz das klassische Problem, welches über BindingSourcen recht simpel zu lösen ist.
Meine Tabellen sehen wire folgt aus:
Code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
CREATE TABLE kopf (nr INT NOT NULL IDENTITY, zusatzname NVARCHAR(20))
CREATE UNIQUE INDEX kopf_pk ON kopf ( nr ) ;
ALTER TABLE kopf ADD PRIMARY KEY ( nr );
CREATE TABLE pos (nr INT NOT NULL, posnr INT NOT NULL, zusatz NVARCHAR(20))
CREATE UNIQUE INDEX pos_pk ON pos ( nr, posnr ) ;
ALTER TABLE pos ADD PRIMARY KEY ( nr, posnr );
ALTER TABLE pos ADD CONSTRAINT pos_fk_nr FOREIGN KEY (nr) REFERENCES kopf (nr); |
|
Wenn ich dann zwei BindingSourcen habe, dann sehen diese Verknüft wie folgt aus:
C#-Code: |
kopfBindingSource.DataSource = DATASET
kopfBindingSource.DataMember = "kopf"
posBindingSource.DataSource = kopfBindingSource
posBindingSource.DataMember = "pos_fk_nr"
|
Das funktioniert super!!!
--------------------------------------------------------
Jetzt zuim eigentlichen Problem:
Ich habe jetzt 3 Tabellen, die miteinander verknüpft sind:
Code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
CREATE TABLE kopf_master (nr_master INT NOT NULL IDENTITY, name_master NVARCHAR(20))
CREATE UNIQUE INDEX kopf_master_pk ON kopf_master ( nr_master ) ;
ALTER TABLE kopf_master ADD PRIMARY KEY ( nr_master );
CREATE TABLE kopf (nr INT NOT NULL, zusatzname NVARCHAR(20))
CREATE UNIQUE INDEX kopf_pk ON kopf ( nr ) ;
ALTER TABLE kopf ADD PRIMARY KEY ( nr );
ALTER TABLE kopf ADD CONSTRAINT kopf_fk_nr FOREIGN KEY (nr) REFERENCES kopf_master (nr_master)
CREATE TABLE pos (nr INT NOT NULL, posnr INT NOT NULL, zusatz NVARCHAR(20))
CREATE UNIQUE INDEX pos_pk ON pos ( nr, posnr ) ;
ALTER TABLE pos ADD PRIMARY KEY ( nr, posnr );
ALTER TABLE pos ADD CONSTRAINT pos_fk_nr FOREIGN KEY (nr) REFERENCES kopf (nr); |
|
Leider funktioniert folgendes nicht:
C#-Code: |
kopf_masterBindingSource.DataSource = DATASET
kopf_masterBindingSource.DataMember = "kopf_master"
kopfBindingSource.DataSource = kopf_masterBindingSource
kopfBindingSource.DataMember = "kopf_fk_nr"
posBindingSource.DataSource = kopfBindingSource
posBindingSource.DataMember = "pos_fk_nr"
|
Ich erhalte folgende Fehlermeldung:
| Fehlermeldung: |
Der Wert NULL kann in die nr-Spalte, spoc.dbo.pos-Tabelle nicht eingefügt werden. Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT.
Die Anweisung wurde beendet. |
Ich habe ein Beispielprojekt angehängt, was aus nur paar Zeilen Code besteht, aber das Problem genau schildert!
Ich hoffe wirklich, dass mir jemand helfen kann
Danke im Voraus
Andrej