这是我的代码:
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
阵列似乎甚至没有填满。
我能做些什么来解决这个问题?请记住它是一个动态数组(我不确定它将有多少条目)所以我不知道如何遍历每个条目并给它一个初始值。
感谢。
答案 0 :(得分:0)
好像你的dr(0)是一个空对象,但是尝试在它的末尾添加.ToString()。但当然这取决于UserBookings()的数据类型。
与我的同事谈话
你应该使用dr.HasRows而不是“if dr.read()”,因为你正在丢失一整行。
答案 1 :(得分:0)
在此处作为可能答案列出的问题中,我还看到当方法的返回类型为字符串时,您在某一点返回False。这是不允许的。您可以返回Nothing或String.Empty,但不能返回False。
答案 2 :(得分:0)
这里最简单的选择是认识到你可以使用替代构造,例如ArrayList(或更好,List(of String))
这样,对象将动态增长,直到你加载了所有项目,并且可以将结果作为数组返回
下面有两个可能的选项(通用列表(Of 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
-
注意:我添加了一些额外的代码(假设dr是一个DataReader,并且你将其称为函数