Member 12988273 Ответов: 2

Пустой ссылкой исключение


Привет, сэр, я получаю исключение нулевой ссылки. пожалуйста, помогите

Что я уже пробовал:

Protected Sub ddlstate_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlstate.SelectedIndexChanged
        If ddlfin_year.SelectedIndex = 0 Then
            ClientScript.RegisterStartupScript(Me.GetType, "msgg", "alert('Please select Financial Year');", True)
            ddlstate.SelectedIndex = 0
            Return
        End If
        If ddlmnth.SelectedIndex = 0 Then
            ClientScript.RegisterStartupScript(Me.GetType, "msgg", "alert('Please select Month');", True)
            ddlstate.SelectedIndex = 0
            Return
        End If
        con.Open()
        Dim da As New SqlDataAdapter
        Dim dt As New DataTable
        Dim cmd As New SqlCommand
        Dim read As SqlDataReader



        cmd = New SqlCommand("Select Fin_Year,state_code,allocation from StateBrief_NSAP where Fin_Year='" & ddlfin_year.SelectedItem.Text & "' And   state_code='" & ddlstate.SelectedItem.Value & "'", con)
        da = New SqlDataAdapter(cmd)

        dt = New DataTable()

        da.Fill(dt)

        read = cmd.ExecuteReader()
        read.Read()
        If dt.Rows.Count > 0 Then
            While read.Read

                Dim allocation As String = CStr(read("allocation"))



                Session("alloc") = allocation






            End While
            txtAllocation.Text = Session("alloc").ToString()


            txtAllocation.Enabled = False
        Else


            txtAllocation.Enabled = True
            txtAllocation.Text = ""




        End If



        read.Close()



    End Sub

Member 7870345

Привет:
В какой строке происходит исключение?

Member 12988273

txtAlloc.Текст = сессия ("распределение").Метод toString()

Michael_Davies

Сначала используйте отладчик, когда возникает исключение, наведите курсор мыши на переменные в нарушающей строке, чтобы увидеть, какая из них является нулевой, а затем выясните, почему и разберитесь с условием.

Во-вторых, почему вы заполняете DataTable, а затем используете Reader?

В-третьих, в определяющем операторе ваших переменных da, dt и cmd вы создаете их с помощью New, а затем снова создаете их в коде, почему "Dim da As New SqlDataAdapter" создаст переменную и выделит новый экземпляр, никогда не использовав этот экземпляр, вы затем создадите новый, прежде чем использовать его на самом деле; "da = New SqlDataAdapter(cmd)". То же самое касается dt и cmd.

Member 12988273

я сделал все, как вы сказали, но все еще получаю ошибку txtAlloc.Текст = сессия ("распределение").Метод toString()

Michael_Davies

в вашем коде это "alloc", а не "allocation" при вызове Session (). Допустили ли вы орфографическую ошибку, которая затем вернет Null, так как alloc не может быть найден, но распределение может быть?

2 Ответов

Рейтинг:
2

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень забавный вид, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, на которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы сможете узнать!


Рейтинг:
1

Member 7870345

Привет:
Если ошибка находится в txtAlloc.Text=Session("allocation").ToString() линия, кажется, что Session("allocation") является нулевым, поэтому при вызове ToString функция, вызывающая исключение.