Operación de borrado en Dapper

  1. Las operaciones de borrado también usan db.Execute() para ejecutar sentencias DELETE y devuelven el número de filas afectadas.
  2. Para borrar se localiza el registro objetivo mediante su ID de clave primaria única.
  3. Es obligatorio añadir la condición WHERE! Si falta WHERE se vacía toda la tabla.
  4. Mala práctica: construir SQL con concatenación de cadenas, genera riesgo de inyección SQL;✅Forma correcta: consultas parametrizadas.

Nota original: El borrado de entidades se basa en un Id único. La estructura SQL principal es DELETE ... WHERE ClavePrimaria=Valor

El siguiente ejemplo presenta vulnerabilidad de inyección SQL

// Código peligroso: concatenación de cadenas con riesgo de inyección 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 comprobar resultado del borrado
    var info = db.Query<Student>("SELECT * FROM student WHERE Id = " + id).SingleOrDefault();
}Lenguaje del código: C# (cs)

Implementación parametrizada estándar

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 borrado con marcadores de parámetro
        string sqlDelete = "DELETE FROM student WHERE Id = @Id";
        int targetId = 1;

        // Ejecutar borrado, pasar parámetros mediante clase anónima
        int rowsAffected = db.Execute(sqlDelete, new { Id = targetId });

        // Comprobación: después del borrado la consulta debe devolver null
        var student = db.Query<Student>(
            "SELECT * FROM student WHERE Id = @Id",
            new { Id = targetId }
        ).SingleOrDefault();
    }
    Console.ReadKey();
}

// Clase entidad Student
public class Student
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}Lenguaje del código: C# (cs)

Pasar parámetros usando objeto entidad

string sqlDelete = "DELETE FROM student WHERE Id = @Id";
var stu = new Student { Id = 1 };
int rowsAffected = db.Execute(sqlDelete, stu);Lenguaje del código: C# (cs)

Observaciones

  1. Explicación del valor devuelto
    rowsAffected > 0: filas objetivo borradas correctamente;rowsAffected = 0: no se encontraron registros coincidentes.
  2. Aviso de alto riesgo
    DELETE FROM student; sin condiciones vacía toda la tabla, nunca lo escribas por error.
  3. Norma de seguridad
    Todos los id y filtros procedentes de entradas externas deben usar parámetros @xxx, prohibido concatenar cadenas directamente.

Operación de borrado en Dapper

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *