Member 13255783 Ответов: 2

Как исправить эту базу данных с помощью ошибки C# ошибка говорит: "ссылка на объект не установлена на экземпляр объекта.


DB Catch = new DB();

       protected void Page_Load(object sender, EventArgs e)
  {
      DB Catch = new DB();
      DataTable tbl = new DataTable();
      tbl =Catch.RunSearch("select * from Products where id = '" + Request.QueryString["CCode".ToString() + "'"]);
      lblname.Text = tbl.Rows[0][3].ToString();
      lblprice.Text = tbl.Rows[0][1].ToString();
      lblcate.Text = tbl.Rows[0][4].ToString();
      img.ImageUrl="img/Games/"+ Request.QueryString["CCode"].ToString() +".jpg";

  }


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

DB Catch = new DB();

       DataTable tbl = new DataTable();
       tbl =Catch.RunSearch("select * from Products where id = '" + Request.QueryString["CCode".ToString() + "'"]);
       if (tbl.Rows.Count > 0)
       {
           lblname.Text = tbl.Rows[0][3].ToString();
           lblprice.Text = tbl.Rows[0][1].ToString();
           lblcate.Text = tbl.Rows[0][4].ToString();
           img.ImageUrl = "img/Games/" + Request.QueryString["CCode"].ToString() + ".jpg";

[no name]

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

2 Ответов

Рейтинг:
2

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и если это откроет дверь уязвимости под названием "SQL-инъекция", то она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]


Рейтинг:
1

Karthik_Mahalingam

Валидация для null значение перед доступом к объекту.

if (tbl != null && tbl.Rows.Count > 0 && tbl.Columns.Count > 4) {
               lblname.Text = tbl.Rows[0][3].ToString();
               lblprice.Text = tbl.Rows[0][1].ToString();
               lblcate.Text = tbl.Rows[0][4].ToString();
           }


Предупреждение
Форматирование строки sql-запроса уязвимый к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]


Member 13255783

ну код исправил ошибку но tbl пуст и моя база данных содержит около 10 элементов
пожалуйста, помогите мне :(

Karthik_Mahalingam

 tbl = Catch.RunSearch("select * from Products where id = '" + Request.QueryString["CCode"] + "'");

Member 13255783

Вот что я написал ЛБЛ обратно ни с чем

Karthik_Mahalingam

попробуйте запустить запрос в SQL studio и проверить, возвращает ли он какие-либо данные

F-ES Sitecore

Как мы можем помочь вам, если у нас нет доступа к вашим данным, поэтому мы не можем запустить код так, как вы его запускаете? Вы даже не дали большую часть информации, например, на какой линии происходит ошибка. Что вам действительно нужно сделать, так это научиться отлаживать свой код, чтобы вы могли исправить эти вещи самостоятельно или, по крайней мере, получить достаточно информации, которая позволит кому-то помочь вам.

https://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-A-Beginn