OdbcDataReader覆盖

时间:2017-05-24 13:25:26

标签: c# mysql odbcdatareader

我似乎遇到了将返回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;
  }

1 个答案:

答案 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();
}