Member 13421231 Ответов: 2

Если запись имеет значение показать сообщение в метке


я хочу, когда кто-то вводит номер, который содержит "finish" в базе данных

показать в метке "Complete" и очистить txtbox

я попробую это сделать

но не работает

когда я ввожу номер, все еще "Полный" в метке не меняется, когда я меняю номер записи

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

private void label13_TextChanged(object sender, EventArgs e)
        {
            


            SqlConnection con = new SqlConnection("Data Source=NAWAF;Initial Catalog=waterreport;Integrated Security=True");
            con.Open();
            SqlCommand luuud;
            string luud = " select * from reportonetmp WHERE no='" + label13.Text+ "'";
            luuud = new SqlCommand(luud,con);
           SqlDataReader reader = luuud.ExecuteReader();
           if (reader.Read())
           {
               textBox1.Text = reader["rec_report"].ToString();
               textBox2.Text = reader["rec_code"].ToString();
               textBox3.Text = reader["initial_date_repair"].ToString();
               dateTimePicker1.Text = reader["initial_hour_repair"].ToString();
               label9.Text = reader["customername"].ToString();
               label11.Text = reader["customerphone"].ToString();

           }




           reportCheck();




        }

        public void reportCheck()
        {
            string fni = "finish";
            label12.Text = "";
            SqlConnection con = new SqlConnection("Data Source=NAWAF;Initial Catalog=waterreport;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("Select Count(1) from reportone where checkk =   @fniish  ", con);
            cmd.Parameters.AddWithValue("@fniish", fni);
            int rowsCount = (int)cmd.ExecuteScalar();
            if(rowsCount > 0)
            {
                label12.Text = "Complete";
            }
            else
            {
                label12.Text ="";
            }


            con.Close();

Maciej Los

"Не работает" - это не описание.

Member 13421231

я обновить мой вопрос

Richard Deeming

string luud = " select * from reportonetmp WHERE no='" + label13.Text+ "'";

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

2 Ответов

Рейтинг:
2

Pete O'Hanlon

Вы же выдаете select * когда все, что вы хотите сделать, это определить, есть ли у вас соответствующие записи в базе данных? Первое, что я бы сделал, это изменил это на SELECT COUNT(1) вместо. Затем, вместо того чтобы выдавать считыватель данных, я бы использовал Executescalar так[^] поскольку вы возвращаете одно значение, то все, что вам нужно сделать, это преобразовать результирующий счетчик в целое значение и соответствующим образом изменить метку.


Рейтинг:
0

Karthik_Mahalingam

Цитата:
когда я ввожу номер, все еще "Полный" в метке не меняется, когда я меняю номер записи

потому что он не идет внутрь If condition блок, где вы устанавливаете значение в метке.

попробуй вот так
public void reportCheck()
   {
       string fni = "finish";
       label12.Text = ""; // clear the value initially every time
       SqlConnection con = new SqlConnection("Data Source=NAWAF;Initial Catalog=waterreport;Integrated Security=True");
       con.Open();
       SqlCommand cmd = new SqlCommand("Select count(*) from reportone where checkk = @fniish", con);
       cmd.Parameters.AddWithValue("@fniish", fni);
       int rowsCount = (int)cmd.ExecuteScalar();
       if (rowsCount > 0)
           label12.Text = " Complete ";  // set the value based on condition
       con.Close();

   }


Member 13421231

Та же проблема этикетка все еще имеет "полный" и не меняется, когда я ввожу другой номер

Karthik_Mahalingam

там, где вы вводите, покажите свой обновленный код.

Member 13421231

я обновляю его сейчас

Karthik_Mahalingam

выполните этот запрос в SQL Studio и проверить счетчик

Select count(*) from reportone where checkk = 'finish'