No se puede ejecutar la instrucción de actualización con Dapper (error de parámetros)

asp.net c# dapper micro-orm sql-update

Pregunta

Estoy intentando actualizar una fila usando Dapper, pero estoy teniendo un error al especificar los parámetros en mi declaración de actualización

An exception of type 'System.InvalidOperationException' occurred in IBM.Data.DB2.iSeries.dll but was not handled in user code
Additional information: Not enough parameters specified.  The command
requires 3 parameter(s), but only 0 parameter(s) exist in the
parameter collection.

Repository.cs

public void Update(Movie movie)
{
      var sql = "UPDATE myDB.movies set title=?, genre=? where Id=?";
      db.Execute(sql, new 
               {   movie.Title, 
                   movie.Genre, 
                   movie.ID 
               });
}

Movie.cs

public class Movie
{
    public int ID { get; set; }
    [Required]
    public string Title { get; set; }

    [Required]
    [Display(Name="Release Date")]
    [DisplayFormat(DataFormatString="{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)]
    public DateTime ReleaseDate { get; set; }

    [Required]
    public string Genre { get; set; }
    public decimal Price { get; set; }
}

Estoy usando iDB2Connection para acceder a una base de datos IBM ISeries.

Respuesta aceptada

Solución 1

Lo que hice fue nombrar parámetros para que su orden se mantuviera igual independientemente del orden alfabético de Dapper.

public void Update(Movie movie)
{
  var sql = "UPDATE myDB.movies set title=@param1, genre=@param2 where ID=@param3";
  db.Execute(sql, new { param1 = movie.Title, param2 = movie.Genre, param3 = movie.ID });
}

Si alguien conoce una mejor solución. por favor publica en este hilo.


Respuesta popular

Solo prueba así en tu archivo Repository.cs

public void Update(Movie movie)
{
      var sql = "UPDATE myDB.movies set title=:Title, genre=:Genre where Id=:ID";
      db.Execute(sql, new 
               {  
                  Title = movie.Title, 
                  Genre = movie.Genre, 
                  ID = movie.ID 
               });
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow