0

Dapper を使用して行を更新しようとしていますが、更新ステートメントでパラメーターを指定するとエラーが発生します

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.

リポジトリ.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; }
}

iDB2ConnectionIBM ISeries データベースへのアクセスに使用しています。

4

2 に答える 2

2

回避策 1

私がしたことは、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 });
}

誰かがより良い解決策を知っている場合。このスレッドに投稿してください。

于 2014-01-29T07:09:35.027 に答える