我似乎遇到了将返回Integer的方法问题。我试图用这个返回的Integer修改特定列的行。数据库将使用此新返回值更新预先存在的列值。但是,似乎每行都被修改为LAST行的值,而不管先前保存的具体行是什么。我确信我的代码只是覆盖变量,但我想知道在哪里。这是我的方法;会很感激反馈。
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 Class assemble()
private void assemble(int value)
{
setFirst(value);
}
private void setFirst(int value)
{
value = value * 2;
}
答案 0 :(得分:0)
只需更改
即可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();
}