Member 7250221 Ответов: 5

как решить ошибку System.NullReferenceException


Я продолжаю получать эту ошибку каждый раз, когда пытаюсь запустить запрос в своей базе данных, будь то select или insert. как мне решить эту проблему?


System.NullReferenceException: Object reference not set to an instance of an object


Эта ошибка указывает на строку 39 моего кода. код показан ниже:
String sql, connection, lname, fileloc;
           sql = "select FileLoc, Fname, Lname from apps where Lname = '"+searchString.Text+"'";
           connection = Properties.Settings.Default.cvmanagerConnectionString;

           SqlDataReader reader = null;

           SqlConnection conn = new SqlConnection(connection);
           SqlCommand cmd = new SqlCommand(sql, conn);

           try
           {
               conn.Open();
               cmd.ExecuteReader();

               intsearchLB.Enabled = true;

               while (reader.Read())// THIS IS LINE 39
               {
                   lname = reader["Lname"].ToString();
                   fileloc = reader["FileLoc"].ToString();

                   intsearchLB.Items.Add(new searchresults(lname, fileloc));
               }

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }
           finally
           {
               nsCancel.Enabled = true;
               nsView.Enabled = true;
               nsEdit.Enabled = true;
               nsSave.Enabled = true;
               nsDate.Enabled = true;
               nsTime.Enabled = true;
           }

[no name]

Он может исходить откуда угодно, но, не видя того, что вы пытаетесь сделать, мы не можем сказать.

[no name]

Я обновил вопрос...ошибка указывает на строку 39, которую я указал. Это цикл while, в котором выполняется считыватель.

5 Ответов

Рейтинг:
30

Sergey Alexandrovich Kryukov

Хорошо, после обновления этот отчет об ошибке хорош.

SqlDataReader reader = null;
//...
                while (reader.Read()) //...


Ну же, вы назначены null сам по себе и никогда не строил reader к тому моменту, когда вы попытаетесь Read!

Вам наверное нужно

reader = cmd.ExecuteReader();


[no name]

пожалуйста, уточните...я вас не понимаю

[no name]

Большое спасибо. я не могу поверить, что это ускользнуло от меня ... хотя Спасибо большое

Sergey Alexandrovich Kryukov

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

Хорошо, вам нужно назначить ссылку читателя на что-то ненулевое.

Sergey Alexandrovich Kryukov

Хорошо, смотрите мое обновление.

Sergey Alexandrovich Kryukov

Хорошо, я вижу, что Джон добавил то же самое...

Sergey Alexandrovich Kryukov

@plasteezy: даже если у вас есть и ответ, который вы можете использовать, Я ненавижу свой собственный ответ.
Это и есть польза? Я набрал то, что вы должны были сделать, вы будете использовать его, ну и что?
Если вы не видите, что не так с вызовом метода нулевого объекта, как это может вам помочь?
Вам действительно нужно сделать шаг назад и узнать о классах, объектах, переменных, ссылках...

Рейтинг:
23

#realJSOP

Вы должны установить reader на что-то, прежде чем пытаться использовать его:

reader = cmd.ExecuteReader();


[no name]

Большое спасибо. я не могу поверить, что это ускользнуло от меня ... хотя Спасибо большое

Рейтинг:
2

#realJSOP

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


[no name]

Я обновил вопрос...ошибка указывает на строку 39, которую я указал. Это цикл while, в котором выполняется считыватель.

Рейтинг:
17

Sergey Alexandrovich Kryukov

Когда вы видите это исключение и используете VS, 90% вашей проблемы решается. Запустите его под отладчиком-он будет через оскорбительную строку кода прямо вам в лицо. (Это ты сделал? Все еще проблема? - Куда же?)

Вам нужно иметь правильные параметры исключения отладки: VS Главное Меню -> Debug -> исключения... (Ctrl+D,E). По умолчанию эти параметры почти оптимальны.

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


[no name]

Я обновил вопрос...ошибка указывает на строку 39, которую я указал. Это цикл while, в котором выполняется считыватель.

Рейтинг:
0

vishnulalr

Добавить в попробовать кеш с пустой ссылкой исключение это эффективные


Dave Kreskowiak

И это абсолютно неправильно, если вы хотите, чтобы ваш код работал.

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