Asp.net 对象引用未设置为对象的实例。将项目添加到arraylist时

Asp.net 对象引用未设置为对象的实例。将项目添加到arraylist时,asp.net,vb.net,Asp.net,Vb.net,这段代码在页面加载时运行平稳,但在尝试从另一个页面调用loadAllergies()时出错。我试图找到答案,我看到的大部分是实例化我的arraylist,但没有任何帮助。我尝试将要添加到数组中的项分配到变量中,但仍然得到相同的错误。似乎当我从另一个页面调用sub时,它丢失了我想要添加到数组中的值,因此得到了错误 这是我的密码: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles

这段代码在页面加载时运行平稳,但在尝试从另一个页面调用loadAllergies()时出错。我试图找到答案,我看到的大部分是实例化我的arraylist,但没有任何帮助。我尝试将要添加到数组中的项分配到变量中,但仍然得到相同的错误。似乎当我从另一个页面调用sub时,它丢失了我想要添加到数组中的值,因此得到了错误

这是我的密码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If IsPostBack = False Then
        loadAllergies()
    End If
End Sub

Public Sub loadAllergies()
    'Dim qal As ArrayList = TryCast(Session("Queries"), ArrayList)

    'Dim qal As New List(Of String)()
    Dim qal As New ArrayList()
    qal.Add(" Select ISNULL(b.allergy,'') + ', ' + ISNULL(c.allergy,'') + ', ' + ISNULL(d.allergy,'') + ', ' + " &
            " ISNULL(e.allergy, '') + ', ' + ISNULL(f.allergy,'') AS Allergies" &
            " From Patient_Data..tbmasterAllergies a " &
            " Left outer join Build_FIle..tbCoAllergy b on a.AllergyID1=b.AllergyID" &
            " Left outer join Build_FIle..tbCoAllergy c on a.AllergyID2=c.AllergyID" &
            " Left outer join Build_FIle..tbCoAllergy d on a.AllergyID3=d.AllergyID" &
            " Left outer join Build_FIle..tbCoAllergy e on a.AllergyID4=e.AllergyID" &
            " Left outer join Build_FIle..tbCoAllergy f on a.AllergyID5=f.AllergyID" &
            " where HospNum = '" & Session.Item("HospNum") & "' ")
    qal.Add(" Select ISNULL(b.ChiefComplaint,'') + ', ' + ISNULL(c.ChiefComplaint,'') + ', ' + ISNULL(d.ChiefComplaint, '') + ', ' + " &
            " ISNULL(e.ChiefComplaint,'') + ', ' + ISNULL(f.ChiefComplaint,'') AS ChiefComplaints from Patient_Data..tbOutPatientHistory a " &
            " left outer join Build_FIle..tbCoChiefComplaint b on a.ChiefComplaintID1 = b.ChiefComplaintID" &
            " Left outer join Build_FIle..tbCoChiefComplaint c On a.ChiefComplaintID2 = c.ChiefComplaintID" &
            " left outer join Build_FIle..tbCoChiefComplaint d on a.ChiefComplaintID3 = d.ChiefComplaintID" &
            " Left outer join Build_FIle..tbCoChiefComplaint e on a.ChiefComplaintID4 = e.ChiefComplaintID" &
            " left outer join Build_FIle..tbCoChiefComplaint f on a.ChiefComplaintID5 = f.ChiefComplaintID" &
            " where IdNum='" & Session.Item("IDNUM") & "' ")

    Dim allal As ArrayList = New ArrayList
    Dim ccal As ArrayList = New ArrayList
    For Each query As String In qal
        Dim index As Integer = qal.IndexOf(query)
        sqlstr = query
        sqlcomm = New SqlCommand(sqlstr, sqlconn)
        sqlconn.Open()
        rd = sqlcomm.ExecuteReader
        If rd.HasRows Then
            rd.Read()
            If index = 0 Then
                ccal.Add(rd.GetString(0))
            Else
                allal.Add(rd.GetString(0))
            End If
        End If
        sqlconn.Close()
        rd.Close()
    Next

    If allal.Count = 0 Then
        Exit Sub
    End If

    If ccal.Count = 0 Then
        Exit Sub
    End If

    Dim dt As DataTable = New DataTable
    dt.Columns.Add("Allergies")
    dt.Columns.Add("ChiefComplaints")

    With dt
        Dim dr As DataRow
        dr = dt.NewRow
        dt.Rows.Add(dr)
        For i As Integer = 0 To .Rows.Count - 1
            For ii As Integer = 0 To .Columns.Count - 1
                If .Columns(ii).ColumnName = "Allergies" Then
                    .Rows(i)("Allergies") = allal(0)
                    Continue For
                End If

                If .Columns(ii).ColumnName = "ChiefComplaints" Then
                    .Rows(i)("ChiefComplaints") = ccal(0)
                End If
            Next
        Next
    End With


    gv1.DataSource = dt
    gv1.DataBind()


    'qal.Clear()
    'allal.Clear()
    'ccal.Clear()
    End Sub
End Class

多亏了Chris Dunaway的评论,我已经解决了这个问题。对于会话变量,我没有使用session.Item(“”),而是使用了HttpContext.Current.session(“”)。我不知道为什么从其他页面调用sub或函数时会丢失session.item值,但这解决了问题。

您希望找到的答案似乎是有人告诉您代码有什么问题,但答案实际上是让您了解如何调试自己的代码,以便找出问题所在。首先,您没有告诉我们异常抛出的位置,这表明您没有注意到。一旦知道了位置,就可以确定该行上的哪个引用是
Nothing
。然后,您可以逐步查看代码,以了解未指定对象的原因。开始学习如何调试。或者。一旦我从另一个页面调用loadAllergies,错误就会出现在我要添加的第一项上。第一个问题你可能有其他问题。您是否希望每个查询只返回一条记录?您只需调用。为每个查询读取一次。签出DataTable.Load(DataReader),就不需要循环来填充数据表了。