2016-11-25 1 views
-3

Ich arbeite an einer Anwendung von Sindows Forms, um Inventar einiger Scanner beizubehalten. Ich benutze Linq2Sql, jede Tabelle hat eine id Spalte. Auf meinem Reparaturverlaufsformular. Ich versuche, die Seriennummer aus der Inventory-Tabelle zu verwenden, so dass es zur Datenbank geht und die sID aus der Tabelle nachschlägt und den richtigen Wert zurückgibt, aber wenn ich alle eingegebenen Daten an die History-Tabelle senden werde, wird es eine Null-Referenz-Ausnahmevb.net Formular linq nullreferenceexception

Dim db As New DataClasses1DataContext 
Dim rep As Scanner_Repair_History 

Dim scan = (From Scanner_Inventory In db.Scanner_Inventories Where scannerid.Text = Scanner_Inventory.SN Select Scanner_Inventory.SID).FirstOrDefault 

rep.SID = scan 
rep.Date_Broken = datebroke.Value 
rep.Description = description.Text 
rep.Send_Date = senddate.Text 
rep.Recieve_Date = recievedate.Text 
rep.Cost = cost.Text 
rep.PlantID = plantid.Text 
rep.BID = brokenid.Text 
rep.RMAnumber = rmanum.Text 

db.Scanner_Repair_Histories.InsertOnSubmit(rep) 
db.SubmitChanges() 
+2

Mögliche Duplikat [Was für eine Nullreferenceexception ist, und wie kann ich es beheben?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do- i-fix-it) – Bugs

Antwort

0

ist, dass ich, aber Sie nicht Ihre „rep“ brachte instanziieren Variable

0

Sie keine definierte Objekt für die Platzierung mit einem ‚neuen‘ Schlüsselwort, aber ich bin auch gespannt, ob es sich um eine Systemtyp.

Update basierend auf Jinx88909 Möglicherweise geben Sie ein vollständiges POCO-Objekt zurück, das null sein kann und eine Null-Eigenschaft hat. Sie können dies am häufigsten anpassen, indem Sie eine Nullbedingung ausführen, wenn Sie .NET 4.5 oder höher verwenden. "?" Operator.

Dim db As New DataClasses1DataContext 
'I need to be a new object and not instantiated as Nothing 
Dim rep As New Scanner_Repair_History 

'You have the potential for a nothing value here as 'FirstOrDefault' includes a potential Nothing'. 
'I would get the entire object and then just a property of it after the fact 
Dim scan = (From Scanner_Inventory In db.Scanner_Inventories Where scannerid?.Text = Scanner_Inventory?.SN Select Scanner_Inventory).FirstOrDefault?.Sid 

If scan IsNot Nothing Then 
    rep.SID = scan 'Could you maybe want scan.Id or something similar? 
    rep.Date_Broken = datebroke.Value 
    rep.Description = description.Text 
    rep.Send_Date = senddate.Text 
    rep.Recieve_Date = recievedate.Text 
    rep.Cost = cost.Text 
    rep.PlantID = plantid.Text 
    rep.BID = brokenid.Text 
    rep.RMAnumber = rmanum.Text 

    db.Scanner_Repair_Histories.InsertOnSubmit(rep) 
    db.SubmitChanges() 
Else 
    Console.WriteLine("I got nothing for you with the inputs you put in!") 
End If 
+0

mit dem isnot nichts springt nur auf die Inserts in die Tabelle. von dem, was ich sagen kann, wenn ich das Programm starte 'rep' zeigt auf die 'Scanner_Repair_History' Tabelle wie seine an, aber wenn es nach der Abfrage springt 'rep' ändert sich zu 'nichts'. Ich bin mir nicht ganz sicher, was die Ursache ist. und "scan" gibt die richtige ID für den Scaner SN zurück – Johnathan