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;
}
我知道这段代码没用,但我会向您展示它,以获得我想要做的逻辑。
我认为你的方法是错误的。
- 首先,使用
select
语句从数据库中读取 - 然后你复习这个结果,你的
rdr.Read()
- 然后创建一个新命令,更新原始记录
- 在读卡器中向前移动(
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
}