Operación de actualización

  1. Las actualizaciones en Dapper usan el método Execute() para ejecutar sentencias UPDATE y devuelven el número de filas afectadas.
  2. Es obligatorio añadir la condición WHERE, si se omite se actualizarán todas las filas de la tabla.
  3. No recomendado: construir SQL mediante concatenación de cadenas (el enfoque sencillo del texto original), genera una vulnerabilidad de inyección SQL.
  4. Recomendado: consultas parametrizadas con @NombreParametro, usando objetos de entidad o clases anónimas para el mapeo automático.

Nota original: la lógica de actualización es similar a la de inserción; redacta la sentencia UPDATE y usa WHERE para modificar únicamente las filas objetivo.

Ejemplo

// Código peligroso! Concatenación de cadenas con riesgo de inyección SQL, solo como ejemplo incorrecto
using (IDbConnection db = new MySqlConnection(conn))
{
    var id = 1;
    string sqlUpdate = "UPDATE student set FirstName='NuevoNombre',LastName='NuevoApellido',Email='NuevoCorreo' WHERE Id=" + id;
    int rows = db.Execute(sqlUpdate);
    var info = db.Query<Student>("Select * From student WHERE Id=" + id, new { 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))
    {
        // 1.SQL de actualización con marcadores de parámetro @
        string sqlUpdate = @"UPDATE student 
                             SET FirstName=@FirstName, LastName=@LastName, Email=@Email 
                             WHERE Id=@Id";

        // 2.Preparar datos de actualización usando un objeto entidad
        var stu = new Student()
        {
            Id = 1,
            FirstName = "foxdevelop",
            LastName = "com",
            Email = "admin@foxdevelop.com"
        };

        // 3.Ejecutar actualización y obtener filas afectadas
        int rowsAffected = db.Execute(sqlUpdate, stu);

        // 4.Consultar para comprobar el resultado
        var studentInfo = db.Query<Student>(
            "SELECT * FROM student WHERE Id=@Id",
            new { Id = 1 }
        ).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)
  1. La condición WHERE es imprescindible
    Si olvidas WHERE obtendrás UPDATE student SET xxx, modificando toda la tabla y provocando fallos graves.
  2. Coincidencia estricta de nombres de parámetros
    No distingue mayúsculas y minúsculas entre @NombreParametro del SQL y las propiedades de la entidad o clase anónima, pero los nombres deben coincidir.
  3. Significado del valor devuelto
    int rowsAffected: mayor que cero significa filas actualizadas; cero significa que no hubo registros coincidentes.
  4. Aviso de seguridad
    Nunca construyas SQL concatenando cadenas. Las entradas externas pueden generar ataques de inyección SQL.

Actualizar solo algunos campos

Si solo quieres cambiar el correo electrónico, no hace falta escribir todas las columnas:

UPDATE student SET Email=@Email WHERE Id=@Id

Operación de actualización

Deja una respuesta

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