#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.Выбранное значение «‘».