MySQL обновляет весь столбец в сетке данных

0

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

 using System;
 using System.Data;
 using System.Windows.Forms;
 using MySql.Data.MySqlClient;

 namespace Aliena_Store
{
public partial class Form3 : Form
{
    MySqlConnection connection = new MySqlConnection("server=localhost;user=root;database=Aliena_Store;port=3306;password=Blackie");
    public Form3()
    {
        InitializeComponent();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
        {




          //MySqlConnection(VarribleKeeper.MySQLConnectionString);
            connection.Open();

            MySqlDataAdapter MyDA = new MySqlDataAdapter();
            string sqlSelectAll = "SELECT * From Aliena_Store.Game_Details";
            MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, connection);

            DataTable table = new DataTable();
            MyDA.Fill(table);

            BindingSource bSource = new BindingSource();
            bSource.DataSource = table;


            dataGridView1.DataSource = bSource;

        }


    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {


    }

    private void SeeForm2_Click(object sender, EventArgs e)
    {
        Hide();
        Form2 f = new Form2(); // This is bad
        f.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string updateQuery = ("UPDATE Aliena_Store.Game_details SET Quantity = '" + AddStock.Text + "'");


        try
        {
            MySqlCommand command = new MySqlCommand(updateQuery, connection);
            if (command.ExecuteNonQuery() == 1)
            {
                MessageBox.Show("DATA UPDATED");
            }
            else
            {
                MessageBox.Show("Data NOT UPDATED");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

    private void AddStock_TextChanged(object sender, EventArgs e)
    {

    }
}
}

любая подсказка, где мой код идет не так?

  • 0
    Вы всегда должны использовать параметризованный SQL, чтобы сделать ваш код более понятным, избежать проблем с конвертацией и избежать атак внедрения SQL.
  • 0
    0 баллов в настоящее время как университетский проект, который не предназначен для показа функций безопасности
Показать ещё 2 комментария
Теги:
datagrid

1 ответ

0
Лучший ответ

В вашем запросе обновления нет предложения WHERE, поэтому каждая запись будет установлена на новое количество, а ExecuteNonQuery вернет вам номер с измененным количеством строк.
Код попадет в правильный случай if, только если у вас есть только одна строка в таблице.

Легкое исправление заключается в следующем:

if (command.ExecuteNonQuery() > 0)
    ... ok ...

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

Так, например,

string updateQuery = @"UPDATE Aliena_Store.Game_details 
                       SET Quantity = @qty 
                       WHERE GameID = @id";

Этот запрос будет обновлять только запись с указанным GameID (где GameID - это гипотетическое имя вашего поля с первичным ключом для таблицы)

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

MySqlCommand command = new MySqlCommand(updateQuery, connection);
command.Parameters.Add("@qty", MySqlDbType.VarChar).Value = AddStock.Text;
command.Parameters.Add("@id", MySqlDbType.Int32).Value = Convert.ToInt32(txtGameID.Text);
if (command.ExecuteNonQuery() > 0)
     ....

Ещё вопросы

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