Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#带更新的SqlCommand查询_C#_Sql Server_Sqlcommand - Fatal编程技术网

C#带更新的SqlCommand查询

C#带更新的SqlCommand查询,c#,sql-server,sqlcommand,C#,Sql Server,Sqlcommand,我试图找到它。但我找不到确切的答案。所以我决定问这个问题。我需要你的帮助 我希望在不覆盖借方、分数列的情况下将值添加到表值中。它将增加当前值 cmd = new SqlCommand("UPDATE Users SET Debit=@debit, Score=@score WHERE Phone=@phone", con); con.Open();

我试图找到它。但我找不到确切的答案。所以我决定问这个问题。我需要你的帮助

我希望在不覆盖借方、分数列的情况下将值添加到表值中。它将增加当前值

cmd = new SqlCommand("UPDATE Users SET Debit=@debit, 
                                       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();
例如:

Table, Phone: 999 | Debit: 1500 | Score: 100 //current <br>
我知道这样的SQL查询。但是我不知道如何在
SqlCommand

UPDATE Users 
SET Debit = Debit + [user input], Score = Score + [user input] 
WHERE = Phone
有什么建议吗

(对不起,我的英语很糟糕,我希望你们能理解我的意思)

谢谢

如果您想添加,只需添加:

请注意逐字字符串
@“…”
语法。请不要忘记处理(explicit
Close
是反模式):

如果要添加,只需添加:

请注意逐字字符串
@“…”
语法。请不要忘记处理(explicit
Close
是反模式):


您可以使用+=运算符进行更新。像这样更改sql命令

UPDATE Users SET Debit+=@debit, 
                 Score+=@score 
                                 WHERE Phone=@phone

您可以使用+=运算符进行更新。像这样更改sql命令

UPDATE Users SET Debit+=@debit, 
                 Score+=@score 
                                 WHERE Phone=@phone

这会对你有帮助的……试着用这种方式

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();


这会对你有帮助的……试着用这种方式

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();


您的SqlCommand看起来不错,有什么问题?您的SqlCommand看起来不错,有什么问题?请不要硬编码sql,而是使用参数(如问题中所示),但输出将与Dmitry Bychenko相同。是的,输出将相同,但:1。(几乎)所有查询都是不同的(因此优化器必须为每个查询生成计划);2.该查询易于sql注入:假设
textBox2.Text
包含,比如说,
123--。在这种情况下,您将得到以下查询:
“更新用户设置Debit=Debit+123——…”(请注意**注释**
--
)。所以输入
123;--`将更新整个表,而不仅仅是所需的电话Ohhh..是的,非常感谢Dmitry Bychenko…我的查询不安全。我尝试了这种方法,但没有解决我的问题。我更喜欢使用参数请不要硬编码sql,而是使用参数(如问题中所述),但输出将与Dmitry Bychenko相同。是的,输出将是相同的,但是:1。(几乎)所有查询都是不同的(因此优化器必须为每个查询生成计划);2.该查询易于sql注入:假设
textBox2.Text
包含,比如说,
123--。在这种情况下,您将得到以下查询:
“更新用户设置Debit=Debit+123——…”(请注意**注释**
--
)。所以输入
123;--`将更新整个表,而不仅仅是所需的电话Ohhh..是的,非常感谢Dmitry Bychenko…我的查询不安全。我尝试了这种方法,但没有解决我的问题。我更喜欢使用参数来解决我的问题。谢谢我真的很感激。:)它解决了我的问题。谢谢我真的很感激。:)
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();
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();