Mysql同时读取和更改变量

时间:2015-12-29 14:48:25

标签: c# 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;
}

我知道这段代码没用,但我告诉你要获得我想做的逻辑。

2 个答案:

答案 0 :(得分:1)

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

  1. 首先,您使用select声明从数据库中读取;
  2. 然后你回顾那个结果,你的rdr.Read();
  3. 然后创建一个新命令,更新原始记录;
  4. 向读者前进(rdr)并从2开始重复,直至完成。
  5. 你现在在做什么是不可能的。您无法从update获得结果集,只会受到影响。

    或者,如果可以的话,让你的update语句进行计算(似乎它只从原来的number中减去一个,那么为什么不在SQL中这样做呢?):

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

答案 1 :(得分:0)

是的,你的代码真的没用。在您的更新语句中,您传递的参数@newNumber不提供它。关闭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
   }