Mysql同时读取和更改变量

本文关键字:改变 变量 读取 Mysql | 更新日期: 2023-09-27 18:28:33

我想将一些变量移位一。我搜索了它的命令,但找不到。如果有人知道,请帮帮我。

这是代码:

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;
}

我知道这段代码没用,但我会向您展示它,以获得我想要做的逻辑。

Mysql同时读取和更改变量

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

  1. 首先,使用select语句从数据库中读取
  2. 然后你复习这个结果,你的rdr.Read()
  3. 然后创建一个新命令,更新原始记录
  4. 在读卡器中向前移动(rdr),从2开始重复,直到完成为止

你现在所做的是不可能的。您无法从update中获取结果集,只会影响计数。

或者,如果可以的话,让您的更新语句来进行计算(看起来它只是从原始number中减去一,那么为什么不在SQL中这样做呢?):

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

是的,您的代码真的没用。在您的更新语句中,您正在传递一个参数@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
   }