Khizy Ответов: 1

Как вычесть и обновить таблицу запасов, когда заказ был сделан


У меня есть две таблицы таблица запасов и таблица продаж
Я хочу вычесть количество на складе из количества в таблице продаж.
После вычитания запасов таблица должна быть обновлена с новым значением


Созданная мной функция не работает, она выдает два сообщения об ошибках;
1. Блок 1: ошибка SQL логики неполной входной
2. логическая ошибка SQL неполный ввод

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

private void updateStock()
         {
            int newAmount = 0;
             try
             {
                SetConnection();
                sql_con.Open();
                sql_cmd = sql_con.CreateCommand();
                
                string CommandText = "SELECT total_in_stock FROM Stocks_record WHERE item_code = " + txtProCode.Text;
                DB5 = new SQLiteDataAdapter(CommandText, sql_con);
                //DS5.Reset();

                try
                {
                    DB5.Fill(DT5);
                    foreach (DataRow row in DT5.Rows)
                    {
                        newAmount = int.Parse(row["total_in_stock"].ToString()) - int.Parse(txtQuantity.Text);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show("Block 1: " + e.Message);
                }

                string query = "UPDATE Stocks_record SET total_in_stock = @i WHERE item_code = " + txtProCode.Text;
                SQLiteCommand cmd = new SQLiteCommand(query, sql_con);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@i", newAmount);
                cmd.ExecuteNonQuery();
                DB5 = new SQLiteDataAdapter(CommandText, sql_con);
                DB5.Fill(DT5);

                //DT5 = DS5.Tables[0];
                dataGridView2.Refresh();
                dataGridView2.DataSource = DT5;
                sql_con.Close();
            }

             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
         }

1 Ответов

Рейтинг:
11

Afzaal Ahmad Zeeshan

Ошибка сама по себе проясняет путаницу, Логическая ошибка SQL неполный ввод Вы пытались цитировать переменные в вашем контенте? Насколько я знаю, SQL требует, чтобы вы использовали строковые кавычки вокруг данных, например,

... WHERE data = 'something'
Любой гуру SQL может поправить меня, если я ошибаюсь здесь. Таким образом, вполне возможно, что ваш запрос является неполным и вызывает эту проблему.

Наконец, не используйте конкатенацию в SQL-запросах, так как это подвергает запросы SQL-инъекции, Всегда рассматривайте возможность использования параметров для передачи входных данных в запросы. Вы уже делаете это в запросе обновления, но не полностью.

SQL-инъекция - Википедия[^]