inserción de núcleo .net utilizando dapper con parámetros

.net-core dapper

Pregunta

Soy nuevo en el uso de Dapper y estoy un poco perdido al seguir las instrucciones para una declaración de inserción.

Tengo el siguiente modelo:

Usuario

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

Y el siguiente controlador que está recuperando datos de una llamada ajax JSON (He intentado 3 formas diferentes en función de tres respuestas diferentes que he visto.

Intento de 1 error: sintaxis incorrecta cerca de 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);
     }
}

Intento de error 2 : sintaxis incorrecta cerca de la palabra clave Tabla

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);
     }
}

Intento 3 (Probado utilizando Dapper.Contrib) Error: Nombre de objeto no válido Usuarios (No sé qué es esto, los usuarios no existen en ningún lado ya que no utilizo los plurales

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);
     }
}

Respuesta aceptada

En el código que proporcionó para Attempt 1, ¡Su instrucción de inserción de SQL no parece correcta!

Además, si simplemente está insertando, puede usar el método Execute . Esto debería funcionar.

Si su tabla solo tiene esas 3 columnas, puede hacer esto.

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

Si su tabla tiene más columnas de las especificadas en la consulta de inserción, debe especificar explícitamente los nombres de columna (en el orden) en la instrucción INSERT.

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

Tenga en cuenta que la palabra clave User es una palabra clave reservada. Puede envolverlo con corchetes para evitar el error.

Use [User] lugar de User .

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué