2017-10-17 88 views
1

我試圖找到它。但我找不到我的答案。所以我決定提出這個問題。我需要你的幫助。C#SqlCommand查詢更新

我希望將值添加到表值中,而不會覆蓋Debit,Score列。它會增加當前值。

cmd = new SqlCommand("UPDATE Users SET [email protected], 
             [email protected] 
           WHERE [email protected]", con); 

con.Open(); 

cmd.Parameters.AddWithValue("@phone", textBox1.Text); 
cmd.Parameters.AddWithValue("@debit", textBox2.Text); 
cmd.Parameters.AddWithValue("@score", textBox3.Text); 

cmd.ExecuteNonQuery(); 

MessageBox.Show("Амжилттай"); 
con.Close(); 

例如:

Table, Phone: 999 | Debit: 1500 | Score: 100 //current <br> 

當我從textBox1的= 999,TextBox2中= 500,textBox3 = 50

Table, Phone: 999, Debit: 2000, Score: 150 //updating like that 

添加值我知道這樣的SQL查詢。但我不知道如何編寫代碼SqlCommand

UPDATE Users 
SET Debit = Debit + [user input], Score = Score + [user input] 
WHERE = Phone 

有什麼建議嗎?

(對不起,我的英語太可怕了,我希望你們明白我想問)

感謝

+0

你的SqlCommand似乎罰款,這是什麼問題? – styx

回答

6

如果你想添加,只是添加

cmd = new SqlCommand(@"UPDATE Users 
          SET Debit = Debit + @debit, 
           Score = Score + @score 
         WHERE Phone = @phone", con); 

請注意逐字字符串@"..."語法。請不要忘記處置(明確Close反模式):

string sql = 
    @"UPDATE Users 
     SET Debit = Debit + @debit, 
      Score = Score + @score 
    WHERE Phone = @phone"; 

//TODO: put the right connection string instead of "MyConnectionStringHere" 
//DONE: IDisposable (SqlConnection) should be wrapped into using 
using (var con = new SqlConnection("MyConnectionStringHere")) { 
    con.Open(); 

    //DONE: IDisposable (SqlCommand) should be wrapped into using 
    using (var cmd = new SqlCommand(sql, con)) { 
    //TODO: AddWithValue is often a bad choice; change to Add 
    cmd.Parameters.AddWithValue("@phone", textBox1.Text); 
    cmd.Parameters.AddWithValue("@debit", textBox2.Text); 
    cmd.Parameters.AddWithValue("@score", textBox3.Text); 

    cmd.ExecuteNonQuery(); 
    //TODO: a better policy is to read localized strings from resources 
    MessageBox.Show("Амжилттай"); 
    } 
} 
+0

它解決了我的問題。謝謝!我真的很感激。 :) –

1

這將幫助你....只是試圖以這種方式..

SqlCommand cmd = new SqlCommand("UPDATE Users SET Debit = Debit + " + textBox2.Text + ", Score = Score + " + textBox3.Text + " WHERE Phone = " + textBox1.Text + "", con); 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Амжилттай"); 
       con.Close(); 

OR

SqlCommand cmd = new SqlCommand("UPDATE Users SET Debit = Debit + @debit, Score = Score + @score WHERE Phone = @phone", con); 
       con.Open(); 
       cmd.Parameters.AddWithValue("@phone", textBox1.Text); 
       cmd.Parameters.AddWithValue("@debit", textBox2.Text); 
       cmd.Parameters.AddWithValue("@score", textBox3.Text); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Амжилттай"); 
       con.Close(); 
+0

請不要* hardcode * sql,但使用*參數*(如在問題中) –

+0

但輸出將是相同的德米特里Bychenko。 –

+0

是的,輸出將是相同的,但是:(幾乎)所有的查詢都會不同(所以優化器應該爲每個查詢生成計劃)。 2.查詢很容易** sql注入**:想象一下'textBox2.Text'包含,比如說123; --'。在這種情況下,您將會查詢:'「更新用戶SET借方=借方+ 123 - ...」(請注意**註釋**'--')。所以輸入'123; --'將更新*整個表*,不只是所需的手機 –