Мой обновленный запускает вычисление, но обновляет одно и то же значение во всех строках

#c# #sql

#c# #sql

Вопрос:

Когда я запускаю приведенную ниже функцию, она выполняет цикл и записывает новые значения в базу данных, но все значения одинаковы. У меня была похожая проблема, но я реализовал ее по-другому — это другой способ, не использующий массив.

 cmd = con.CreateCommand();
string end = @"SELECT balance, accrued FROM account ";
string update = @"UPDATE account SET balance = @balance WHERE account.prodid = product.prodid";
con.Open();
cmd = new SQLiteCommand(end, con);
reader = cmd.ExecuteReader();
while (reader.Read())
{
    double balance = double.Parse(reader[0].ToString());
    double accrued = double.Parse(reader[1].ToString());
    balance = balance *accrued;
    cmd = new SQLiteCommand(update, con);        
    cmd.Parameters.AddWithValue("balance", balance);
    cmd.ExecuteNonQuery();       
}
  

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

1. Что product в вашем sql-операторе update? Похоже, это даже не допустимый оператор sql.

2. @johnluke. следовательно, продукт представляет собой таблицу в базе данных

3. Вы хотите обновить всю таблицу учетных записей или только определенный идентификатор?

4. @Jmeister скопируйте вашу инструкцию update, вставьте в SSMS, замените @ balance на 1, затем попробуйте запустить. Это должно завершиться неудачей: не удалось привязать многосоставный идентификатор для продукта … или что-то в этом роде

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

Ответ №1:

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

 UPDATE account SET balance = balance * accrued 
  

С наилучшими пожеланиями.