标量变量和简单的删除语句

时间:2013-11-30 13:46:19

标签: c# .net dapper

我有方法DeleteAuthors接收整数类型的id。我想使用dapper删除该表中的所有数据,其中BookId等于作为参数接收的id。

private void DeleteAuthors(int id)
{
    this.db.Query("DELETE FROM Author WHERE BookId = @id");
}

必须声明标量变量“@id”。

所以我试过这个

private void DeleteAuthors(int id)
{
   this.db.Query("DELETE FROM Author WHERE BookId = @Id", new { Id = id});
}

,错误是

  

发生了'System.ArgumentException'类型的未处理异常   Dapper.dll

     

其他信息:使用多映射API时,请确保您   如果你有Id以外的键

,请设置splitOn参数

id parametar变量使用int值正确填充。我知道这很简单,但我在这里很挣扎。

2 个答案:

答案 0 :(得分:2)

如果要删除记录,请使用db.Execute代替db.Query

int numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);

但是你应该使用using语句来确保连接尽快处理/关闭(即使出错):

int numDel = 0;
using (SqlConnection db = new SqlConnection("ConnectionString"))
{
    db.Open();
    numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);
}

答案 1 :(得分:0)

不确定在查询中替换@

但是下面也会有效:

private void DeleteAuthors(int id)
{
    this.db.Query(string.Format("DELETE FROM Author WHERE BookId = {0}",id));
}