.net 核心插入使用带参数的 dapper

.net core insert using dapper with parameters

我是 Dapper 的新手,在按照插入语句的说明操作时有点迷茫。

我有以下型号:

用户

public class User
{
    public int UserId { get; set;}
    public string UserName { get; set; }
    public string Password { get; set; }
}

下面的控制器正在从 JSON ajax 调用中检索数据(根据我看到的三个不同答案,我尝试了 3 种不同的方法。

尝试 1错误:UserId 附近的语法不正确

public IActionResult UserData([FromBody] User user)
{
    using (SqlConnection cn = new SqlConnection(@"Server=.\SQLEXPRESS..."))
    {
        cn.Query<User>(@"INSERT INTO User VALUES UserId = @UserId, UserName = @UserName, Password = @Password", 
        new
        {
            UserId = user.UserId,
            UserName = user.UserName,
            Password = user.Password
         });

     return StatusCode(200);
     }
}

尝试 2错误:关键字附近的语法不正确 Table

public IActionResult UserData([FromBody] User user)
{
    using (SqlConnection cn = new SqlConnection(@"Server=.\SQLEXPRESS..."))
    {
        cn.Execute(@"INSERT Table(User) VALUES(@UserId, @UserName, @Password)", 
        new
        {
            UserId = user.UserId,
            UserName = user.UserName,
            Password = user.Password
         });

     return StatusCode(200);
     }
}

尝试 3(尝试使用 Dapper.Contrib) 错误:对象名称用户无效(我不知道这是什么,用户不知道'不存在任何地方,因为我不使用复数形式

public IActionResult UserData([FromBody] User user)
{
    using (SqlConnection cn = new SqlConnection(@"Server=.\SQLEXPRESS..."))
    {
        cn.Insert<User>(new User
        {
            UserId = user.UserId,
            UserName = user.UserName,
            Password = user.Password
         });

     return StatusCode(200);
     }
}

在您为尝试 1 提供的代码中,您的 SQL 插入语句看起来不正确!

另外,如果只是简单的插入,可以使用Execute的方法。这应该有效。

如果您的 table 只有这 3 列,您可以这样做。

var q=@"INSERT INTO [User] VALUES (@UserId,@UserName,@Password)";
cn.Execute(q,user);

如果您的 table 列数多于您在插入查询中指定的列数,您应该在 INSERT 语句中明确指定列名(按顺序)。

var q=@"INSERT INTO [User](UserId,UserName,Password) VALUES (@UserId,@UserName,@Password)";
cn.Execute(q,user); 

请注意,关键字 User 是保留关键字。您可以用方括号括起来以避免错误。

使用 [User] 而不是 User

参考:https://technet.microsoft.com/en-us/library/dd776381(v=sql.105).aspx#BasicSyntax