如何更新用户
本文关键字:用户 更新 何更新 | 更新日期: 2023-09-27 18:28:44
目标
一致地更新用户的表。
问题
我必须编辑特定用户的信息,但我不知道如何编辑。
-
首先,在我的应用程序上有一个
Users
表,它存储了某个用户的所有信息。 -
其次,我不能用递归的方式来思考这个问题。
Users
表上有多个列,我不知道如何只编辑用户请求的列知道吗
我真正想要的是什么
我没有通过C#执行任何查询。我从数据库中需要的一切都是通过存储过程实现的。(除了基本的.Select()
、FirstOrDefault()
等)。换句话说,我需要两样东西:
- 一种(MySQL)递归查询语法思想
- 我需要一个C#方法来调用我的存储过程,如下所示:
User user = new User("chiefmaster@test.com"); // The target of the update.
UpdateUser
(user.Email => "masterchief@test.com", // the old is "chiefmaster@test.com"
user.Nickname => "MasterChief" // the old is "ChiefMaster");
正如您所看到的,我正在更新特定用户的Email
和Nickname
——这不应该影响其他用户的信息。
你能给我一些想法或方法吗?
有很多方法可以解决这个问题,你尝试过什么?例如,您可以使用ORM,它为您处理此问题。
您还可以手动实现每个属性的脏标志,并只保存更改后的属性。
或者您可以创建一个方法UpdateUserEmailAndNickname(User user, string newEmail, string newNickname)
。
我建议您创建一个存储过程,当接收到空参数"时,它会保留以前的值
create procedure UpdateUser(IN idUpdate INT, IN newEmail varchar(30), IN newNick varchar(30))
begin
DECLARE prevEmail varchar(30);
DECLARE prevNick varchar(30);
DECLARE updEmail varchar(30);
DECLARE updNick varchar(30);
select email into prevEmail, nick into prevNick
from USERS
where id = idUpdate
if(newEmail = '')
set updEmail = prevEmail
else
set updEmail = newEmail
if(newNick = '')
set updNick = prevNick
else
set updNick = newNick
update USERS
set email = updEmail, nick = updNick
where id = idUpdate;
end;
当您调用此过程时,您需要传递所有参数,但当您检测到列没有更新时,只需将其作为空字符串(或调整存储过程的空值)传递
当然,您需要根据需要添加更多的参数,声明更多的变量,并调整这个示例