- Operações de exclusão também usam
db.Execute()para executar comandosDELETEe retornar o número de linhas afetadas. - A exclusão geralmente localiza os registros‑alvo usando o ID da chave primária única.
- A cláusula
WHEREé obrigatória! Sem WHERE, toda a tabela será apagada. - Má prática: montar SQL com concatenação de strings, risco de injeção de SQL;✅Forma padrão: consultas parametrizadas.
Observação original: A exclusão de entidades usa um Id único. A estrutura principal do SQL é
DELETE ... WHERE ChavePrimaria=Valor
O exemplo abaixo possui vulnerabilidade de injeção de SQL
// Código perigoso: concatenação de string traz risco de injeção de SQL
using (IDbConnection db = new MySqlConnection(conn))
{
var id = 1;
string sqlQuery = "DELETE FROM student WHERE Id = " + id;
int rowsAffected = db.Execute(sqlQuery);
// Consulta para validar o resultado da exclusão
var info = db.Query<Student>("SELECT * FROM student WHERE Id = " + id).SingleOrDefault();
}Code language: C# (cs)
Forma parametrizada padrão
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
static void Main(string[] args)
{
var conn = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
using (IDbConnection db = new MySqlConnection(conn))
{
// SQL de exclusão com marcadores de parâmetro
string sqlDelete = "DELETE FROM student WHERE Id = @Id";
int targetId = 1;
// Executar exclusão, passar parâmetros por classe anônima
int rowsAffected = db.Execute(sqlDelete, new { Id = targetId });
// Validação: após exclusão o retorno deve ser null
var student = db.Query<Student>(
"SELECT * FROM student WHERE Id = @Id",
new { Id = targetId }
).SingleOrDefault();
}
Console.ReadKey();
}
// Classe de entidade Student
public class Student
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}Code language: C# (cs)
Passar parâmetros com objeto de entidade
string sqlDelete = "DELETE FROM student WHERE Id = @Id";
var stu = new Student { Id = 1 };
int rowsAffected = db.Execute(sqlDelete, stu);Code language: C# (cs)
Observações
- Explicação do valor retornado
rowsAffected > 0: linhas‑alvo excluídas com sucesso;rowsAffected = 0: nenhum registro correspondente encontrado. - Aviso de risco elevado
DELETE FROM student;sem condições apaga toda a tabela, nunca escreva isso por engano. - Regra de segurança
Todos os ids e filtros vindos de entrada externa devem usar parâmetros@xxx, proibido concatenar strings diretamente.
Operação de exclusão com Dapper
Previous: Operação de atualização