Dapper 存储过程

  1. 存储过程(Stored Procedure):提前在数据库编写SQL逻辑,程序直接调用。
  2. Dapper调用存储过程核心:指定 CommandType.StoredProcedure
  3. 参数使用匿名类/实体传递,自动映射存储过程入参。
  4. 示例场景:创建MySQL存储过程,根据ID删除student数据。

MySQL 创建存储过程

-- 创建删除学生的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_Student_PROC`(IN `id` INT)
BEGIN
    DELETE FROM student WHERE Id = id;
ENDCode language: JavaScript (javascript)
  • IN id int:输入参数,接收要删除的主键编号
  • BEGIN ~ END:存储过程主体
DROP PROCEDURE IF EXISTS Delete_Student_PROC;

调用存储过程

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))
    {
        // 参数说明:
        // 第1个参数:存储过程名称
        // 第2个参数:传入参数
        // 第3个参数:必须指定命令类型为存储过程
        int affectedRows = db.Execute(
            "Delete_Student_PROC",
            new { id = 2 },
            commandType: CommandType.StoredProcedure
        );

        Console.WriteLine($"受影响行数:{affectedRows}");
    }
    Console.ReadKey();
}Code language: JavaScript (javascript)

带返回结果的存储过程

如果存储过程是查询数据,使用 .Query<T>()

List<Student> list = db.Query<Student>(
    "GetAllStudent_PROC",
    null,
    commandType: CommandType.StoredProcedure
).ToList();Code language: PHP (php)
  • 普通SQL:commandType: CommandType.Text(默认,可以不写)
  • 存储过程:commandType: CommandType.StoredProcedure(必须显式指定)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注