- Procedimiento almacenado (Stored Procedure): lógica SQL predefinida dentro de la base de datos, que la aplicación invoca directamente.
- Punto clave para invocar procedimientos almacenados con Dapper: especificar
CommandType.StoredProcedure. - Los parámetros se pasan mediante clases anónimas u objetos entidad; se mapean automáticamente a los parámetros de entrada del procedimiento.
- 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
Previous: Operación de borrado en Dapper
Next: Consulta IN