Laden...

Guid null zuweisen: Wie geht das?

Erstellt von Sr_John vor 12 Jahren Letzter Beitrag vor 12 Jahren 7.430 Views
Thema geschlossen
S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren
Guid null zuweisen: Wie geht das?

Hallo Leute. Wie es schon oben steht möchte ich einer Guid Variable Wert NULL zuweisen, was nicht geht.
Hier ist mal der Quellcode

            
gDRV = (DataRowView)this.tblGerätBindingSource.Current;
gNewRow = (MTCDataSet.TblGerätRow)gDRV.Row;
gNewRow.BeginEdit();
gNewRow.InventNr = tBInvNr.Text;
gNewRow.bezeichnung = tBGBezeichnung.Text;
gNewRow.serien = tBGSerien.Text;
gNewRow.kaufdatum = dTPKauf.Value;
gNewRow.garantie = dTPGarantie.Value;
gNewRow.baujahr = Convert.ToInt16(tBBau.Text);
gNewRow.status = cBGStatus.Text; 
gNewRow.besitzstatus = cBBesitz.Text;
SqlGuid test = SqlGuid.Null;
gNewRow.fistandort = (Guid)test.Value; (hier geht nicht)
gNewRow.EndEdit();

wie kann ich dies anders anstellen?

T
156 Beiträge seit 2010
vor 12 Jahren

Mit einem Nullable-Typ.
Also entweder Guid? oder alternativ Nullable<Guid>.
Aber dann muss die Spalte in der Datenbank auch so eingestellt sein, dass sie Null sein darf.
LG, Marko

S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren

kannst du mir ein Beispielcode zeigen? Ich raf momentan nicht.
wenn ich so mach:

Guid? test = null;
gNewRow.fistandort =(Guid)test;

kommt die Fehlermeldung:> Fehlermeldung:

Das Objekt mit Nullwert muss einen Wert haben.

In Db ist NULL-Wert erlaubt.

C
2.121 Beiträge seit 2010
vor 12 Jahren

Das da
(Guid)test;
castet null in den Typ Guid, der nicht null sein darf.
Du müsstest (Guid?) casten.
Oder eben einfach nur test zuweisen, ohne cast.

S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren
Guid? test = new Guid();
 test = null;
gNewRow.fistandort =test;

Dann kommt die Fehlermeldung:> Fehlermeldung:

Fehler 1 Der Typ "System.Guid?" kann nicht implizit in "System.Guid" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

gNewRow.fistandort-> müsste eigentlich einen GUID Wert haben.

C
1.214 Beiträge seit 2006
vor 12 Jahren

test.Value

S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren

Guid? test = new Guid?();
test = null;
gNewRow.fistandort =test.Value;

Fehlermeldung:> Fehlermeldung:

Das Objekt mit Nullwert muss einen Wert haben.

F
155 Beiträge seit 2009
vor 12 Jahren

Hallo,

Guid ist ein Wertetyp, er kann also nicht den Wert null annehmen.
Du kannst es so lösen:

Guid? test = new Guid?();
test = null;
gNewRow.fistandort =test ?? Guid.Empty;

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren

F.Z.
Dann Habe ich
gNewRow.fistandort={00000000-0000-0000-0000-000000000000}
wie kann ich denn das abfangen?
Mein Gedanke war:

if(gNewRow.fistandort==null)
C
1.214 Beiträge seit 2006
vor 12 Jahren

Fehlermeldung:
Das Objekt mit Nullwert muss einen Wert haben.

Und was verstehst du daran nicht? Ich hab ehrlich gesagt das Gefühl, du willst gar nichts verstehen, sondern hier einfach deinen Code und die Fehler reinposten, damit die anderen das für dich lösen und du es nur noch eintippen brauchst.
Die Lösung hat F.Z. schon genannt, du darfst halt nicht auf Value zugreifen, wenn das null ist, musst vorher die Eigenschaft HasValue prüfen.

Edit:
Zu deiner nächsten Frage, das bestätigt meine Vermutung. Warum probierst nicht einfach


gNewRow.fistandort =test ?? null;

S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren

Coder007
danke für die Antwort,( trotz deines Gefühl, dass ich nur auf Quellcode warte.
Von einer Seite hast du recht, ich will den Quellcode haben, aber nicht weil ich faul bin zu denken, sondern weil ich noch ein nob bin, und weil ich nicht weiter komme, da es, egal was ich mache, immer Fehlermeldungen kommen. Mit deinem letzten Beispiel geht es auch nicht.

P.s.
Danke für alle Antworten die gekommen sind. Ich hoffe ihr werdet gnedigt mit mir sein, und versucht trotzdem weiter zu helfen.

F
155 Beiträge seit 2009
vor 12 Jahren
  
gNewRow.fistandort =test ?? null;  
  

dieser Code hat keinen Sinn, siehe Operator ?? (C#-Referenz).

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

F
155 Beiträge seit 2009
vor 12 Jahren

Dann Habe ich
gNewRow.fistandort={00000000-0000-0000-0000-000000000000}

Guid ist ein Wertetyp, wenn gNewRow.fistandort als Guid definiert ist, kann es nicht null sein.
Wenn du gNewRow.fistandort nicht explizit einen Wert zuweist, ist es auch {00000000-0000-0000-0000-000000000000}.

Wenn du gNewRow.fistandort null zuweisen willst musst du diese Variable als Guid? definieren.

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
1.214 Beiträge seit 2006
vor 12 Jahren

@F.Z.: du hast wohl Recht, ich benutze den ?? nie.

Aber was ich gemeint habe, sollte ja klar sein, kannst es ja so machen:


gNewRow.fistandort =test.HasValue ? test.Value : null;

So, dabei musst du natürlich achten, dass fistandort auch den Wert null annehmen kann und dass es auch in der Datenbank gespeichert werden kann usw.
Im übrigen musst du ja nicht unbedingt auf Null prüfen, du kannst auch auf Guid.Empty prüfen.

S
Sr_John Themenstarter:in
35 Beiträge seit 2008
vor 12 Jahren

Ok Leute, danke nochmals für die Antworten.
Ich gehe jetzt schlafen und morgen versuche ich erneut.

Hinweis von herbivore vor 12 Jahren

Ich hoffe ihr werdet gnedigt mit mir sein, und versucht trotzdem weiter zu helfen.

Nein, und ich bin auch entsetzt, dass so viele Helfer das Spiel trotz der klaren Regelverstöße und obwohl du erkennbar deine Arbeit auf die Leute abwälzen wolltest, überhaupt mit gemacht habe. Auf die Weise wurde binnen kürzester Zeit ein Endlos-Thread produziert, der keinem hilft. So läuft das bei uns nicht und ich erwarte, dass sich das nicht nochmal wiederholt.

Bitte schau in [Hinweis] Wie poste ich richtig? Punkt 1.1.1. und 4, [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) und [FAQ] Wie finde ich den Einstieg in C#?.

Thema geschlossen