Operação de exclusão com Dapper

  1. Operações de exclusão também usam db.Execute() para executar comandos DELETE e retornar o número de linhas afetadas.
  2. A exclusão geralmente localiza os registros‑alvo usando o ID da chave primária única.
  3. A cláusula WHERE é obrigatória! Sem WHERE, toda a tabela será apagada.
  4. 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

  1. Explicação do valor retornado
    rowsAffected > 0: linhas‑alvo excluídas com sucesso;rowsAffected = 0: nenhum registro correspondente encontrado.
  2. Aviso de risco elevado
    DELETE FROM student; sem condições apaga toda a tabela, nunca escreva isso por engano.
  3. 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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *