Перезапись OdbcDataReader

Кажется, у меня проблемы с моим методом, который возвращает целое число. Я пытаюсь изменить строки определенного столбца с этим возвращаемым целым числом. База данных обновит уже существующие значения столбцов с помощью этого нового возвращаемого значения. Однако, похоже, что каждая строка изменяется до значения строки ПОСЛЕДНЕЕ, независимо от того, что конкретная строка содержала ранее. Я уверен, что мой код просто перезаписывает переменную, но мне интересно, где. Вот мой метод; был бы признателен за обратную связь.

private int extractValue()
{
  if (connection.State != ConnectionState.Open)
   { 
     this.connection.Open();
   }
   ParsingHelper helper = null // different class - no issues with this.
   String query = "SELECT device FROM dLogger";
   OdbcCommand command = new OdbcCommand(query, this.connection);
   List<Int32> list = new List<Int32>();
   OdbcDataReader reader = null;
   reader = command.ExecuteReader();
   while (reader.Read())
   {
     list.Add(reader.GetInt32(0));
     for (int i = 0; i < reader.FieldCount; i++)
      {
        helper = new ParsingHelper();
        helper.assemble(list[i]);
      }
     }
    return helper.getFirst();
   }

Здесь нет проблем с ParsingHelper, он работает правильно. Моя проблема заключается в перезаписи. Я думал, что Список уменьшит эту проблему, но я что-то упускаю, очевидно.

РЕДАКТИРОВАТЬ: этот подход будет работать лучше?

while(reader.Read())
{
  for (int i = 0; i < reader.FieldCount; i++)
   {
     list.Add(reader.GetInt32(i));
     //....
    }

Если мой стол изначально выглядел так:

   ColA
    1
    2
    3
    4

А моя функция, например, умножила каждое число на 2. Новый столбец будет выглядеть так:

 ColA
  8 // rather than 2
  8 // rather than 4
  8 // rather than 6
  8 // 8 is the last value - therefore, correct.

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

РЕДАКТИРОВАТЬ: Здесь я обновляю свою базу данных:

private void update() 
{
 String query = "UPDATE dLogger SET device = ?";
 OdbcCommand command = new OdbcCommand(query, this.connection);
 if (this.connection.State != ConnectionState.Open)
   {
     this.connection.Open();
    }
   command.Parameters.AddWithValue("?", extractValue());
  }

Кроме того, вот мой простой класс Parsing Helper.

  private void assemble(int value)
  {
   setFirst(value);
  }

  private void setFirst(int value)
  {
    value = value * 2;
  }

1 ответ

Просто поменяй

String query = "SELECT device FROM dLogger";

в

String query = "UPDATE dLogger SET device=device*2";

таким образом:

private void extractValue()
{
  if (connection.State != ConnectionState.Open)
   { 
     this.connection.Open();
   }
   String query = "UPDATE dLogger SET device=device*2";
   OdbcCommand command = new OdbcCommand(query, this.connection);
   command.Execute();
}
Другие вопросы по тегам