Когда я обновляю строку, все строки в gridview обновляются

1

Я использую событие RowUpdating в Gridview. Когда я обновляю строку, все строки в gridview обновляются. Мой код

Con.Open();
SqlCommand cmd = new SqlCommand("update dbo.PersionalDetails set Name='" + txtName.Text + "',Location='" + txtLocation.Text + "' where id=id", Con);
cmd.ExecuteNonQuery();
Con.Close();
Label lblresult = new Label();
lblresult.ForeColor = Color.Green;
lblresult.Text = txtName.Text + " Details Updated successfully";
GridView1.EditIndex = -1;
BindGrid();

Пожалуйста помоги!!

  • 1
    Идентификатор всегда равен id. Сначала удалите SQL инъекцию '';DROP TABLE xxx; -- .... И измените ваш где 'id = id' на параметры
Теги:

3 ответа

4

Это потому, что where id = id равен true для всех строк. Это как where 1 = 1 и оно равно where TRUE. Вот почему все ваши строки обновлены.

From = (Равно) (Transact-SQL)

expression = expression

Типы возврата

логический

Поскольку id - это имена столбцов, они являются допустимыми выражениями.

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

Также using инструкцию using для SqlConnection и SqlCommand.

using (SqlConnection con = new SqlConnection(ConString))
{
   using (SqlCommand cmd = con.CreateCommand())
   {
      cmd.CommandText = "update dbo.PersionalDetails set Name = @name, Location = @location where id = @id";
      cmd.Parameters.AddWithValue("@name", txtName.Text);
      cmd.Parameters.AddWithValue("@location", txtLocation.Text );
      cmd.Parameters.AddWithValue("@id", YourIdValue);
      con.Open();
      cmd.ExecuteNonQuery();
   }
}

Но более важно

Вы всегда должны использовать параметризованные запросы. Этот тип конкатенаций строк открыт для атак SQL Injection.

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

Читайте: Можем ли мы перестать использовать AddWithValue()?

  • 0
    но если он хочет обновить конкретную строку, он должен передать значение для id ... не так ли?
  • 0
    @rushankshah Это верно. Когда он передает id в качестве значения, он соответствует только тем строкам, которые имеют это значение в столбце id .
Показать ещё 1 комментарий
0

измените предложение where следующим образом:

where id='"+id+"'

и передать значение для id

Готово!!!

0

Посмотрите на свое предложение и исправьте его, это всегда ИСТИНА

Еще одна вещь, которую я прочитал о SQL INJECTION, и измените свой стиль кодирования (этот код не сохранится в Интернете!)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню