ahmed_sa Ответов: 1

Ссылка на объект не установлена на экземпляр объекта C#


Я работаю в windows form c# vs 2015 я получаю ошибку мне нужно ее решить

но я не знаю, как это решить

я пишу функцию в текстовом поле измененное событие но когда я начинаю писать в текстовом поле

get error object reference not set to an instance of object .

так вот почему эта проблема возникает и как ее решить .

в текстовом поле изменено событие

private void textBox3_TextChanged(object sender, EventArgs e)  
       {  
           try  
           {  
                
  
                   MatrixClass matrix = new MatrixClass();  
                   string value1 = matrix.GetAtcCode(textBox3.Text);  
                   textBox1.Text = value1;  
                    
                 
           }  
           catch (Exception ex)  
           {  
               MessageBox.Show(ex.Message);  
           }  
       }  
public string GetAtcCode(string GenericName)  
       {  
           SqlConnection con = new SqlConnection(connection);  
            
           con.Open();  
  
           SqlCommand comm = new SqlCommand("ATC_Code_ByGeneric_H", con);  
  
           comm.CommandType = CommandType.StoredProcedure;  
  
           comm.Parameters.Add(new SqlParameter("@Lvl_Name", GenericName));  
  
           string ret = comm.ExecuteScalar().ToString();   
           con.Close();  
  
           return ret;  
  
       }

ALTER PROCEDURE [dbo].[ATC_Code_ByGeneric_H]  
    @Lvl_Name nvarchar(500)  
AS  
    SELECT     Tbl_Lvl1.Code + Tbl_Lvl2.Code + Tbl_Lvl3.Code + Tbl_Lvl4.Code + Tbl_Lvl5.Code AS ATC_Code  
    FROM         Tbl_Lvl1  
                 INNER JOIN  
                 Tbl_Lvl2  
                 ON Tbl_Lvl1.S_ID = Tbl_Lvl2.UpLvl_ID  
                 INNER JOIN  
                 Tbl_Lvl3  
                 ON Tbl_Lvl2.S_ID = Tbl_Lvl3.UpLvl_ID  
                 INNER JOIN  
                 Tbl_Lvl4  
                 ON Tbl_Lvl3.S_ID = Tbl_Lvl4.UpLvl_ID  
                 INNER JOIN  
                 Tbl_Lvl5  
                 ON Tbl_Lvl4.S_ID = Tbl_Lvl5.UpLvl_ID  
    WHERE     (Tbl_Lvl5.Lvl_Name = @Lvl_Name) and Tbl_Lvl5.human=1  
    RETURN

мой код выше может получить код УВД без каких-либо проблем
проблема возникает, когда начинаешь писать с первого символа в текстовом поле
так вот как решить эту проблему ?


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

object reference not set to an instance of object c#

[no name]

Вы используете свой отладчик и находите нулевой объект, а затем исправляете свой код.

ZurdoDev

1. это очень легко исправить, но только вы можете это сделать, потому что мы не можем запустить ваш код.
2. Нет смысла показывать свой SQL, потому что ошибка в C#.
3. Что-то является нулевым, к чему вы пытаетесь получить доступ, но поскольку вы не сказали нам, какая строка кода вызвала ошибку, мы не можем сказать вам, что искать.

1 Ответов

Рейтинг:
2

OriginalGriff

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

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

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

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

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


ahmed_sa

ошибка происходит в этой строке
строка ret = comm.ExecuteScalar ().Метод toString();

Dave Kreskowiak

Ваш код предполагает, что ExecuteScalar вернул что-то полезное. На самом деле он вернул null, потому что что-то в вашем запросе к SQL-серверу сработало не так, как вы думали. ExecuteScalar вернул null. Поскольку вы не можете вызвать ToString для нулевого объекта, вы получаете ошибку, на которую смотрите.

OriginalGriff

Как говорит Дэйв: он возвращает null. И наиболее вероятная причина в том, что ничто не соответствует вашему состоянию. Вам нужно использовать отладчик, чтобы выяснить, почему - мы не можем сделать это за вас: у нас нет доступа к вашим данным, и мы также не знаем, что находится в GenericName.