2015-12-29 57 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 –