- ストアドプロシージャ(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(明示的に指定が必要)
Dapper ストアドプロシージャ
Previous: Dapper 削除処理
Next: INクエリ