- Las operaciones de borrado también usan
db.Execute()para ejecutar sentenciasDELETEy devuelven el número de filas afectadas. - Para borrar se localiza el registro objetivo mediante su ID de clave primaria única.
- Es obligatorio añadir la condición
WHERE! Si falta WHERE se vacía toda la tabla. - 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
- Explicación del valor devuelto
rowsAffected > 0: filas objetivo borradas correctamente;rowsAffected = 0: no se encontraron registros coincidentes. - Aviso de alto riesgo
DELETE FROM student;sin condiciones vacía toda la tabla, nunca lo escribas por error. - 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
Previous: Operación de actualización