sepidehGandom Ответов: 1

Как обновить весь datatable с помощью цикла for В C#


Я хочу обновить весь datatable в c# connected to access(oledb) с помощью цикла for, datatable в порядке, соединение в порядке, проблема в том, что обновление просто выполняется на первой строке, а другие строки остаются неизменными. вот мой код:

OleDbCommand1.CommandText = "UPDATE data Set [pivot] =@pivot WHERE [ID] = @id";
           for (int i = 0; i < n; i++)
           {

               float OP =float.Parse(dt.Rows[i]["openPrice"].ToString());
               float CP = float.Parse(dt.Rows[i]["closePrice"].ToString());
               float HP = float.Parse(dt.Rows[i]["highPrice"].ToString());

               pivotValue = (OP + CP + HP) / 3;
               pivotValueString = pivotValue.ToString();

               OleDbCommand1.Parameters.AddWithValue("@pivot", pivotValueString);
               OleDbCommand1.Parameters.AddWithValue("@id", int.Parse(dt.Rows[i]["ID"].ToString()));

              // OleDbCommand1.CommandText = "UPDATE data Set [pivot] =@pivot WHERE [ID] = @id";

               OleDbCommand1.ExecuteNonQuery();



           }


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

Я изменил место OleDbCommand1.CommandText , внутри и снаружи цикла for, но ничего не изменилось.
Я буду рад, если кто-нибудь поможет.

ZurdoDev

Отладьте его и выясните, что происходит. Например, регистрация инт.Синтаксический анализ(ДТ.Строки[я]["ИД"].ToString() каждый раз, когда он проходит через цикл.

Вам также нужно очистить свои параметры внутри цикла, так как вы всегда вызываете AddWithValue. OleDbCommand1.Параметры.Четкий();

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

sepidehGandom

Большое спасибо, это сработало, я не знал этого кода, Вы действительно сэкономили мне энергию

Richard MacCutchan

Почему вы преобразуете значения в строки только для того, чтобы вы могли преобразовать их обратно в числа? И вы не должны использовать поплавки для финансовых значений; используйте типы int или decimal.

1 Ответов

Рейтинг:
6

F-ES Sitecore

Попробуй;

OleDbCommand1.Parameters.Clear();
OleDbCommand1.Parameters.AddWithValue("@pivot", pivotValueString);
OleDbCommand1.Parameters.AddWithValue("@id", int.Parse(dt.Rows[i]["ID"].ToString()));