gpt4 book ai didi

c# - 使用 dapper 执行部分数据库更新

转载 作者:行者123 更新时间:2023-11-30 13:06:11 25 4
gpt4 key购买 nike

给定数据库表用户,(姓名、姓氏、年龄和性别)。我想创建一个更新语句,而这些列中的任何一个都可以为空 - 未编辑/来自某种客户端。客户端创建一个对象 User { Name, FamilyName, Age, Sex },它只会填充更改的属性,所以基本上我正在寻找一种方法来猜测如何构建查询以及如何向它发送数据。

除了获取整行并将其数据与我从客户端收到的对象合并之外,我根本不知道如何处理这个问题。到目前为止,这是我所做的:选择 > 合并 > 更新。

还有其他办法吗?

最佳答案

假设你的用户类是这样的

public class User
{
public int UserID { get; set; }
public string Name {get; set;}
public string FamilyName {get;set;}
public int? Age { get; set; }
public string Sex { get; set; }

}

(注意定义为Nullable<int>的int字段允许在相应字段中插入空值)

现在,设置字段的代码反射(reflect)了空属性的空值,可以简单地编写为正常更新。将空值作为参数传递所需的所有内容均由 Dapper 内部完成

// Initialize just two fields and leave the other to their defaults
// (null for both strings and nullable ints)
User u = new User();
u.UserID = 1;
u.Name = "Steve";
bool ok = UpdateUser(u);
if(ok) ......


public UpdateUser(User info)
{
using(SqlConnection cnn = new SqlConnection(@"Data Source=(LOCAL);
Initial Catalog=TestDB;
Integrated Security=True;"))
{
cnn.Open();

// Prepare the parameters to pass to Dapper Execute
var pms = new
{
UserID = info.UserID
FirstName = info.Name,
FamilyName = info.FamilyName, // <- this is null
Age = info.Age, // <- this is null
Sex = info.Sex // <- this is null
};

int rows = cnn.Execute(@"UPDATE [UserTable]
SET FirstName= @FirstName,
LastName = @LastName,
Age = @Age,
Sex = @Sex
WHERE UserID = @UserID",
pms);
return rows != 0;
}
}

关于c# - 使用 dapper 执行部分数据库更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com