- 存储过程(Stored Procedure):提前在数据库编写SQL逻辑,程序直接调用。
- Dapper调用存储过程核心:指定
CommandType.StoredProcedure。 - 参数使用匿名类/实体传递,自动映射存储过程入参。
- 示例场景:创建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(必须显式指定)
Previous: Dapper 删除操作
Next: IN查询