2013-11-30 4 views
1

У меня есть метод DeleteAuthors, который получает идентификатор типа integer. Я хочу использовать dapper для удаления всех данных из этой таблицы, которые BookId равен id, полученному как parametar.скалярная переменная и простая инструкция delete

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-интерфейсов с множественным отображением убедитесь, что задает параметр splitOn, если у вас есть ключи, отличные от Id

Параметр переменной id правильно заполнен значением int. Я знаю, что это просто, но я боюсь здесь.

ответ

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

здорово, спасибо .. – user2783193

+0

@ user2783193: от другого вопроса я видел, что вы используете 'FireBird' вместо SQL-сервера в качестве РСУБД. Я предполагаю, что он также использует пул соединений по умолчанию, поэтому рекомендация 'use' по-прежнему верна. Но вы должны, конечно, использовать '... new FbConnection' вместо' SqlConnection'. –

+0

В этом случае я использую mssql, в любом случае спасибо. – user2783193

0

не уверен, что замена @ в запросе

но также следующие работы:

private void DeleteAuthors(int id) 
{ 
    this.db.Query(string.Format("DELETE FROM Author WHERE BookId = {0}",id)); 
} 
Смежные вопросы