2015-12-29 33 views
1

我想将一些变量移动一个。我搜索了它的命令,但我找不到。如果有人知道它,请帮助我。Mysql同时读取和更改变量

下面是代码:

private int shiftNumbers(int number) 
{ 
    int newNumber = 0; 
    string stm = "UPDATE devices SET number= @newNumber WHERE number>@number"; 
    try 
    { 
     con.Open(); 
     cmd = new MySqlCommand(stm, con); 
     cmd.Parameters.AddWithValue("@number", number); 
    } 
    catch (Exception e) 
    { 
     ErrorMessage = e.Message; 
     con.Close(); 
     return null; 
    } 
    try 
    { 
     rdr = cmd.ExecuteReader(); 
     while(rdr.Read()) { 
       newNumber = rdr.GetInt32(1); 
       cmd.Parameters.AddWithValue("@newNumber ", (newNumber-1)); 
     } 
    } 
    catch (Exception e) 
    { 
     ErrorMessage = e.Message; 
     con.Close(); 
     return null; 
    } 
    con.Close(); 
    return 1; 
} 

我知道这个代码无用的,但我告诉它,你得到我想要做的逻辑。

+1

有很多* *的东西不对的代码。我甚至不确定你在做什么。 – David

+0

像@大卫说,请用一个明确的例子来解释你想要什么。 – mybirthname

+0

我知道。我只是试图表明我想要做什么。 –

回答

1

我认为你的方法是错误的。

  1. 首先,您从数据库中读取,使用select语句;
  2. 然后你过去的结果,你的rdr.Read();
  3. 然后你创建一个新的命令,更新原始记录;
  4. 在您的阅读器中前进(rdr)并从2开始重复,直到完成。

你现在正在做的事情是不可能的。您无法从update获得结果集,只是计数受到影响。

或者,如果你可以让你的更新语句做计算(现在看来,这只是从一个中减去原始number,那么为什么不这样做,在SQL):

string stm = "UPDATE devices SET number = number - 1 WHERE number>@number"; 
+0

SQL语句是一个语句,对吗?你想拥有多短? (从“或,...”是第二个解决方案) –

+0

当我回答我的答案时,我无法阅读您的帖子。我现在已经注意到了。 –

+0

没问题。不用谢。 –

0

是的,你的代码真的没用。在你的更新声明中,你传递一个参数@newNumber bu不提供它。在catch区块中关闭连接。

string stm = "UPDATE devices SET number= @newNumber WHERE number>@number"; 

首先从那里你会得到的@newNumber值,然后将其添加为参数,并使用ExecuteNonQuery()方法决定。

如果你想通过其他的参数,以及在你的方法,并使用它像

private int shiftNumbers(int number, int newNumber) 
    { 
     //int newNumber = 0; 
     string stm = "UPDATE devices SET number= @newNumber WHERE number>@number"; 
     using(SqlConnection con = new SqlConnection(connectionString)) 
     { 
      cmd = new MySqlCommand(stm, con); 
       SqlParameter paramNumber = new SqlParameter("@number", SqlDbType.Int); 
       paramNumber.Value = number; 


       SqlParameter paramNewNumber = new SqlParameter("@newNumber", SqlDbType.Int); 
       paramNewNumber.Value = newNumber; 

       cmd.Parameters.Add(paramNumber); 
       cmd.Parameters.Add(paramNewNumber); 

      con.Open(); 

      cmd.ExecuteNonQuery(); 
     } 



    //Rest of your code logic if any 
    } 
+0

你是对的。但我必须从同一个表中获取数字值。这就是为什么我不能分配newNumber –