Перезапись 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();
}