.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
我是 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