Как вычесть количество товара из базы данных после выполнения заказа

#c# #asp.net #sql-server #dapper

Вопрос:

У меня есть 2 asp.net Веб-формы, вебформа1 содержит кнопку, которая перенаправляет на вебформу2, содержащую контактную форму, которую необходимо заполнить для оформления заказа. У меня есть раскрывающийся список, который подключен к базе данных, и в зависимости от того, на какой продукт нажата кнопка на вебформе1, отображается текущее количество конкретного продукта из базы данных. После заказа мне нужно уменьшить/вычесть количество товара из базы данных в зависимости от того, сколько товаров было выбрано в раскрывающемся списке.

Как уменьшить количество товара после выполнения заказа?

Вот код, который заполняет несколько текстовых полей, вставляет валюту и заполняет выпадающий список «Количество» в зависимости от того, на какой товар в вебформе1 нажата кнопка:

        protected void Page_Load(object sender, EventArgs e)
    {
        string productName = Request.QueryString["productname"];
        txt_product13.Text = productName;

        var dictionary = new Dictionary<string, object>
        {
    { "@ProductName", productName }
          };

        var parameters = new DynamicParameters(dictionary);
        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

        using (var connection = new SqlConnection(CS))
        {
            connection.Open();
            var sql = "SELECT * FROM ProductsDB WHERE ProductName = @ProductName";
            var product = connection.QuerySingle<Product>(sql, parameters);
            CultureInfo EuroCulture = new CultureInfo("fr-FR");
            txt_productprice.Text = product.Price.ToString("c", EuroCulture);

            for (int i = 1; i <= product.Quantity; i  )
            {
                dropdownlist1.Items.Add(new ListItem(i.ToString(), i.ToString()));
            }

        }
     
    }
 

На данный момент у меня есть этот код для уменьшения, можете ли вы сказать, в чем моя ошибка и почему он не уменьшает количество из базы данных?

         string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        string productName = Request.QueryString["productname"];
        using (var connection = new SqlConnection(CS))
        {
            connection.Open();
            var sql = "UPDATE ProductsDB SET Quantity = WHERE ProductName = @ProductName"   dropdownlist1.SelectedValue   "'";
            connection.Close();
        }
 

Комментарии:

1. Запрос не работает, потому что он недействителен: UPDATE ProductsDB SET Quantity = WHERE ProductName = @ProductName" dropdownlist1.SelectedValue "'" . Вы не можете установить значение столбца в качестве WHERE предложения, и объединение значения вашего выпадающего списка с именем переменной также имеет мало смысла.

2. Научитесь правильно параметризовать запросы к базе данных.

3. Я исправил запрос, но он уменьшает только на 1 независимо от значения, которое я выбираю из выпадающего списка. Почему? var sql = "UPDATE ProductsDB SET Quantity = Quantity - " dropdownlist1.SelectedValue " WHERE ProductName = @ProductName";

Ответ №1:

ОБНОВИТЕ базу данных ПРОДУКТОВ, УСТАНОВИТЕ количество = ГДЕ имя_продукта = @имя_продукта» раскрывающийся список1.Выбранное значение «‘».

должно быть что-то вроде…

ОБНОВИТЕ базу данных продуктов, УСТАНОВИТЕ количество = (Старое значение — кол-во упорядочено), ГДЕ Имя продукта = @Имя продукта» раскрывающийся список 1.Выбранное значение «‘».