我有方法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值正确填充。我知道这很简单,但我在这里很挣扎。
答案 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));
}