Member 13607426 Ответов: 1

Как сумма стоимости при использовании Insert для таблицы SQL с использованием C#


Это работает, но проблема в том, что каждый раз, когда я выхожу из приложения и перезапускаю его, он начинает суммировать с самого начала, и я хочу продолжить суммирование.


Это мой класс:

public class clans

        public string Name{ get; set; }
        public string Craft { get; set; }
        public int Month { get; set; }
        public int Year { get; set; }
        public decimal Price { get; set; }   
        public decimal Total {get; set; }


Этот код предназначен для вставки в SQL таблицу obb:

cl.Name = txtInsertName.Text;
            cl.Craft = txtInsertCraft.Text;
            cl.Month = Convert.ToInt32(txtInsertMounth.Text);
            cl.Year = Convert.ToInt32(txtInsertYear.Text);
            cl.Price = Convert.ToDecimal(txtInsertPrice.Text);

          cl.Total += cl.Price;

            SqlCommand cmd;

                string query = "insert into obb(Name,Craft,Month,Year,Price,Total) values(@p1,@p2,@p3,@p5,@p6,@p7)";
            cmd = new SqlCommand(query, db);
            cmd.Parameters.AddWithValue("@p1", cl.Name);
            cmd.Parameters.AddWithValue("@p2", cl.Craft);
            cmd.Parameters.AddWithValue("@p3", cl.Month);
            cmd.Parameters.AddWithValue("@p5", cl.Year);
            cmd.Parameters.AddWithValue("@p6", cl.Price);
            cmd.Parameters.AddWithValue("@p7", cl.Total);

            cmd.CommandType = CommandType.Text;
            int i = cmd.ExecuteNonQuery();
            //This line is for datagridview
            string query1 = @" SELECT * FROM obb order by Name ASC, Year ASC";
            clansBindingSource1.DataSource = db.Query(query1, commandType: CommandType.Text);

Решения приветствуются..

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

Я хочу суммировать цену в общем заказе на Имя и год при вставке данных в таблицу SQL.

Dylvh

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

1. Сначала вы должны получить данные. (Выбрать название, год, Цена от порядка кэш по имени АСК, АСК год)
2. Сложите цену за имя и год.
3. Добавить новый цена и вставить новые данные.

Это один из способов сделать это. Другой способ сделать это-при повторном получении данных у вас есть следующий запрос (выберите имя, год, сумму(цену) 'Total' из группы obb по имени, году). Это даст вам общую цену за имя и год, и вы можете просто работать с ним оттуда.

1 Ответов

Рейтинг:
0

Wendelius

Если я правильно вас понял, вы хотите рассчитать текущий итог. Один из простых способов-использовать функцию оконных окон. Рассмотрим следующий пример

SELECT Name, 
       Year,
       SUM(Price) OVER (ORDER BY Name, Year)
FROM Obb
ORDER BY Name, Year

Для различных видов примеров, взгляните на Вычисление простых текущих итогов в SQL Server[^]

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


Maciej Los

5!