.net core insert使用带参数的dapper

时间:2017-02-26 18:43:35

标签: .net-core dapper

我是使用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 错误:关键字表附近的语法错误

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 个答案:

答案 0 :(得分:3)

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

此外,如果您只是插入,则可以使用Execute方法。这应该有用。

如果您的表只有这3列,则可以执行此操作。

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

如果您的表的列数多于您在insert查询中指定的列数,则应在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