我是使用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);
}
}
答案 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