2010-02-18 56 views
0

時,這是我的代碼:「System.NullReferenceException」試圖填補陣列

Public UserBookings() As String 

    If dr.Read() Then 
     Dim intCounter As Integer 
     intCounter = 0 
     While dr.Read() 
      UserBookings(intCounter) = dr(0) 
      intCounter = intCounter + 1 
     End While 
     Return UserBookings 
    Else 
     Return False 
    End If 

但我在運行時出現此錯誤:

A first chance exception of type 'System.NullReferenceException' occurred in Project.exe 

和數組並不甚至似乎填補向上。

我能做些什麼來解決這個問題?記住它是一個動態數組(我不確定它會有多少個條目),所以我不明白我如何循環訪問每個條目並給它一個初始值。

謝謝。

+1

你會需要更具體爲我們提供幫助。請通過使用調試器逐步完成代碼來縮小問題的範圍。 – 2010-02-18 21:15:20

+1

你是否在調試器中完成了代碼?如果你有問題,問題會變得明顯,你可以提出一個明智的問題,甚至可能自己修復。 – 2010-02-18 21:45:26

+0

很好的評論@彩虹的顏色 – Eric 2010-02-18 21:48:13

回答

0

看起來好像您dr(0)是一個空對象,但嘗試將.ToString()添加到它的末尾。但是,這當然取決於UserBookings()的數據類型。

當我的同事

你應該使用的,而不是說dr.HasRows「如果dr.read()」,因爲你失去的一整行。

0

在這裏列出的可能的答案中,我也看到,當方法的返回類型是字符串時,您返回False。這是不允許的。您可以返回Nothing或String.Empty,但不能返回False。

+0

感謝VB.NET的自動類型轉換,根據項目編譯設置,這可能編譯時沒有多少警告。 – 2010-02-19 15:08:06

0

這裏最簡單的方法是要認識到,你可以使用其他的結構,如一個ArrayList(或更好,(的字符串)的列表)

這樣,對象將動態地增長,直到你已經加載所有的項目,你可以返回結果爲數組以下(一般名單(共x)的

兩個可能的選項是首選

Function ReadArray(ByVal dr As IDataReader) As String() 
    Dim tempstorage As New List(Of String) 
    While dr.Read() 
     tempstorage.Add(dr(0)) 
    End While 

    Return tempstorage.ToArray() 
    End Function 

-

Function ReadArray2(ByVal dr As IDataReader) As String() 
    Dim tempstorage As New ArrayList() 
    While dr.Read() 
     tempstorage.Add(dr(0)) 
    End While 

    Return tempstorage.ToArray(GetType(String)) 
    End Function 

-

注:我添加了一些額外的代碼(假設博士是一個DataReader,而你打電話這是一個功能