Procedimientos almacenados en Dapper

  1. Procedimiento almacenado (Stored Procedure): lógica SQL predefinida dentro de la base de datos, que la aplicación invoca directamente.
  2. Punto clave para invocar procedimientos almacenados con Dapper: especificar CommandType.StoredProcedure.
  3. Los parámetros se pasan mediante clases anónimas u objetos entidad; se mapean automáticamente a los parámetros de entrada del procedimiento.
  4. Caso práctico: crear un procedimiento almacenado MySQL para borrar registros de student según su ID.

Crear procedimiento almacenado MySQL

-- Crear procedimiento almacenado para eliminar estudiantes
CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_Student_PROC`(IN `id` INT)
BEGIN
    DELETE FROM student WHERE Id = id;
ENDLenguaje del código: JavaScript (javascript)
  • IN id int: parámetro de entrada, recibe el valor de clave primaria a borrar
  • BEGIN ~ END: cuerpo principal del procedimiento almacenado
DROP PROCEDURE IF EXISTS Delete_Student_PROC;

Invocar el procedimiento almacenado

using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;

static void Main(string[] args)
{
    var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
    using (IDbConnection db = new MySqlConnection(connStr))
    {
        // Notas de parámetros:
        // Primer argumento: nombre del procedimiento almacenado
        // Segundo argumento: valores de entrada
        // Tercer argumento: hay que indicar explícitamente el tipo de comando
        int affectedRows = db.Execute(
            "Delete_Student_PROC",
            new { id = 2 },
            commandType: CommandType.StoredProcedure
        );

        Console.WriteLine($"Filas afectadas: {affectedRows}");
    }
    Console.ReadKey();
}Lenguaje del código: JavaScript (javascript)

Procedimiento almacenado que devuelve conjuntos de resultados

Cuando el procedimiento realiza consultas, usa .Query<T>()

List<Student> list = db.Query<Student>(
    "GetAllStudent_PROC",
    null,
    commandType: CommandType.StoredProcedure
).ToList();Lenguaje del código: PHP (php)
  • SQL normal: commandType: CommandType.Text (valor por defecto, se puede omitir)
  • Procedimiento almacenado: commandType: CommandType.StoredProcedure (debe especificarse de forma explícita)

Procedimientos almacenados en Dapper

Deja una respuesta

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