2011-04-08 1 views
0

Je reçois l'erreur suivante: - Référence d'objet non définie à une instance d'un objet dans le morceau de code suivant: -référence d'objet non définie à une instance d'un objet ---- erreur

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
     If Not IsPostBack Then 

      Dim entityClassID As Integer 
      Dim entityCode As Integer 
      entityClassID = "3" 
      entityCode = "44" 


      If Int32.TryParse(Request("ec").ToString(), entityClassID) AndAlso 
       Int32.TryParse(Request("code").ToString(), entityCode) Then 
       EntityClass.InnerText = entityClassID.ToString() 
       EntityIdentifier.InnerText = entityCode.ToString() 
      End If 

      Dim da As New DataAccess() 

      userID.InnerText = da.GetCurrentUserID() 
      userName.InnerText = da.GetCurrentUserName() 
     End If 
    End Sub 

da comme Nouveau code DataAccess() ne crée une instance, mais quand da.GetCurrentUserID() est appelée une exception est levée comme suit: -

Line 27:    Dim da As New DataAccess() 
Line 28: 
Line 29:    userID.InnerText = da.GetCurrentUserID() 
Line 30:    userName.InnerText = da.GetCurrentUserName() 

Source File: D:\Dev\workpackage\WebSites\Workpackage\customised\workpackage\Index.aspx.vb Line: 29 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.] 
    UnionSquare.Workspace.Data.XmlParameteredSqlParser.ExecuteScalar() +100 
    UnionSquare.Workspace.Data.XmlAccess.ExecuteScalar(String Source, XmlNode XmlQuery) +134 
    UnionSquare.Workspace.Data.XmlAccess.ExecuteScalar(String Source) +39 
    UnionSquare.Workspace.User.GetUserIDFromLogonUser(HttpContext context) +89 
    UnionSquare.Workspace.User.get_CurrentID() +162 
    UnionSquare.Workspace.User.get_Current() +38 
    WorkPackageLibrary.WorkPackageLibrary.DataAccess.GetCurrentUserID() +70 
    Index.Page_Load(Object sender, EventArgs e) in D:\Dev\workpackage\WebSites\Workpackage\customised\workpackage\Index.aspx.vb:29 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +50 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 

Thanx à l'avance pour toute aide que quiconque pourrait être capable de fournir

Cordialement

Ghostrider

+0

Il y a * deux * objets sur la ligne 29 ('userID' et' da'). Êtes-vous sûr que 'userID' est valide? –

+0

On dirait que le problème est dans votre appel da.GetCurrentUserID(). Vous devrez fouiller dans votre classe DataAccess() pour savoir de quoi il se plaint. –

+1

Pouvez-vous inclure le GetCurrentUserID() dans votre question, je suppose que le NullRef bouillonne à partir de là. – kd7

Répondre

0

Le bug semble être que la valeur userName ou userID sont Nothing. Avez-vous vérifié qu'ils sont initialisés avant d'y accéder ici?

+0

Si userID était null n'empêcherait-il pas DataAccess.GetCurrentUserID() d'être appelé? (Ce qui est clairement basé sur la trace de la pile) –

+0

@Seth non ce ne serait pas.La valeur 'userId' ne sera évaluée qu'après l'achèvement de la fonction' GetCurrentUserID() '. – JaredPar

+0

Ok Merci. Donc, l'appel à DataAccess.GetCurrentUserID() et ci-dessous ne serait-il pas hors de la pile lorsque l'exception est levée? Alors la trace de pile s'arrêterait juste à Index.aspx.vb +29? –

1

En regardant la trace de la pile, vous pouvez dire que l'exception est levée à partir de:

UnionSquare.Workspace.User.GetUserIDFromLogonUser(HttpContext context) +89 

Vous devez regarder cette source.

P.S. Ceci n'est pas lié à votre erreur mais ... Le code dans lequel vous initialisez entityClassID & entityCode doit convertir d'une chaîne en int. Il serait plus logique d'enlever les citations. Vous devriez regarder dans le réglage strict compilation option dans votre web.config pour éviter les accidents comme celui-ci.

Dim entityClassID As Integer 
Dim entityCode As Integer 
entityClassID = "3" 
entityCode = "44" 

devrait être remplacé par:

Dim entityClassID As Integer = 3 
Dim entityCode As Integer = 44 
+0

Pourquoi l'erreur ne peut-elle provenir de 'UnionSquare.Workspace.Data.XmlAccess.ExecuteScalar (String Source) + 39' ou' UnionSquare.Workspace.Data.XmlAccess.ExecuteScalar (String Source, XmlNode XmlQuery) + 134'? J'ai toujours trouvé difficile de lire les traces de pile ...: \ – Albireo

+0

@Albireo - Il est en fait mais ceux-ci sont appelés par la ligne que j'ai souligné. Juste basé sur les noms des méthodes, il semblait que vous deviez commencer là pour comprendre ce qui se passait. –

0

Comme KD7 a souligné, l'erreur est probablement en provenance de da.GetCurrentUserID(), car si userID contrôle n'existe pas le compilateur plaindre au moment de la construction. Donc, vérifiez cette méthode.

+0

Fonction publique GetCurrentUserID() As String de l'utilisateur Dim Comme UnionSquare.Workspace.User = UnionSquare.Workspace.User.Current Si l'utilisateur IsNot Rien Puis Retour user.ID.ToString() Else Retour "1" End If Fin Fonction – Ghostrider

+0

@Ghostrider - Vous ne pouvez pas simplement afficher le code de la fonction et attendez que nous trouvions magiquement l'erreur, vous devez placer un point d'arrêt sur 'da.GetCurrentUserID()', déboguer votre application et creuser dans votre code pour savoir ce qui cause l'exception. – Albireo

+0

J'ai un point de rupture à da.GetCurrentUserID une exception est levée lorsque ce point est atteint, le débogage ne me permettra pas d'entrer dans la méthode GetCurrentUserID(). Je pense que le problème peut résider avec moi avoir pour réenregistrer la DLL que GetCurrentUserID se trouve dans – Ghostrider

Questions connexes