我想将一些变量换成一个。我搜索了它的命令,但我无法找到。如果有人知道,请帮助我。
以下是代码:
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;
}
我知道这段代码没用,但我告诉你要获得我想做的逻辑。
答案 0 :(得分:1)
我认为你的做法是错误的。
select
声明从数据库中读取; rdr.Read()
; rdr
)并从2开始重复,直至完成。你现在在做什么是不可能的。您无法从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
}