2

目标

持续更新用户表。

问题

我必须编辑特定用户的信息,但我不知道如何。

  • 首先,Users我的应用程序中有一个表,它存储了某个用户的所有信息。

  • 其次,我不能以递归的方式思考。表上有多个列Users,我不知道如何只编辑用户请求的列。任何想法?

我真正想要的是什么?

我没有通过 C# 执行任何查询。我从数据库中需要的一切都来自存储过程。(除了 , 等基础知识.Select()FirstOrDefault()。换句话说,我需要两件事:

  1. 一个(MySQL)递归查询语法思想;
  2. 我需要一个 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

你能给我一些想法或方法吗?

4

2 回答 2

1

有很多方法可以解决这个问题,您尝试过什么?例如,您可以使用 ORM,它会为您处理这个问题。

您还可以手动实现每个属性的脏标志并仅保存更改的属性。

或者你可以创建一个方法UpdateUserEmailAndNickname(User user, string newEmail, string newNickname)

于 2013-08-23T15:59:42.277 回答
1

我建议您创建一个存储过程,当接收到空参数时,它会保留以前的值

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;

当您调用此过程时,您需要传递所有参数,但是当您检测到列未更新时,只需将其作为空字符串(或调整存储过程的空值)传递

当然你需要根据需要添加更多的参数并声明更多的变量并调整这个例子

于 2013-08-23T16:00:38.130 回答