2011-04-08 45 views
0

我得到以下錯誤: - 對象引用不設置爲一個對象 的實例在下面的代碼段: -對象引用---- ERROR

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作爲新的數據訪問()代碼執行創建一個實例,但是當da.GetCurrentUserID() 被稱爲拋出異常如下: -

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 

感謝名單提前爲任何幫助,任何人都可能是能夠提供

問候

騎手

+0

第29行有兩個*對象('userID'和'da')。你確定'userID'有效嗎? – 2011-04-08 15:21:42

+0

看起來問題出在你的da.GetCurrentUserID()調用中。你必須在你的DataAccess()類中挖掘一下,找出它的抱怨。 – 2011-04-08 15:21:56

+1

你可以在你的問題中包含GetCurrentUserID(),我的猜測是NullRef從那裏冒泡。 – kd7 2011-04-08 15:22:18

回答

0

該錯誤似乎是該值userNameuserIDNothing。你有沒有確保在訪問它們之前初始化它們?

+0

如果userID爲null,是不是會阻止DataAccess.GetCurrentUserID()被調用? (這顯然是基於堆棧跟蹤) – 2011-04-08 15:50:01

+0

@不,它不會。在'GetCurrentUserID()'函數完成之後,'userId'值纔會被計算。 – JaredPar 2011-04-08 15:51:13

+0

好的,謝謝。那麼在拋出異常時,對DataAccess.GetCurrentUserID()和以下的調用是否會超出堆棧?然後堆棧跟蹤將停止在Index.aspx.vb +29? – 2011-04-08 15:53:49

1

通過查看堆棧跟蹤你可以說異常被拋出從:

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

你需要看看這個源。

P.S. 這與您的錯誤無關,但...初始化entityClassID & entityCode的代碼必須將字符串轉換爲int。刪除引號會更有意義。你應該看看你的web.config中設置strict compilation option,以防止這樣的事故。

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

應改爲:

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

爲什麼錯誤不能來自'UnionSquare.Workspace.Data.XmlAccess.ExecuteScalar(String Source)+ 39'或'UnionSquare.Workspace.Data.XmlAccess.ExecuteScalar(String Source,XmlNode XmlQuery)+ 134'?我總是發現難以閱讀堆棧痕跡......:\ – Albireo 2011-04-08 15:29:57

+0

@Albireo - 它實際上是這樣,但是這些被我指出的路線調用。只是基於方法名稱,您似乎需要從那裏開始瞭解發生了什麼。 – 2011-04-08 15:42:28

0

由於KD7指出,該錯誤可能是從da.GetCurrentUserID()的到來,因爲如果userID控制不存在,編譯器會在生成時抱怨。所以,檢查該方法。

+0

公共功能GetCurrentUserID()作爲字符串 昏暗用戶作爲UnionSquare.Workspace.User = UnionSquare.Workspace.User.Current 如果用戶狀態並沒有沒有什麼然後 返回user.ID.ToString() 否則 返回 「1」 End If End Function – Ghostrider 2011-04-08 17:08:19

+0

@Ghostrider - 你不能簡單地發佈函數的代碼,並期望我們神奇地發現錯誤,你應該在'da.GetCurrentUserID()'上放置一個斷點,調試你的應用程序並挖掘您的代碼找出導致異常的原因。 – Albireo 2011-04-08 17:24:31

+0

我在da.GetCurrentUserID有一個斷點,拋出異常時 當這個點到達時,調試將不會允許我步入 GetCurrentUserID()方法。我認爲問題可能在於我有 重新註冊GetCurrentUserID所在的DLL – Ghostrider 2011-04-09 17:10:51