首页 > 解决方案 > 有没有办法在 C# 中使用 Dapper 调用存储的 MySQL 过程包括插入参数?

问题描述

public void InsertUser(string firstname, string lastname, string email, string password, int age)
{
    using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("Database")))
    {
        List<user> users = new List<user>();
        users.Add(new user { Firstname = firstname, Lastname = lastname, Email = email, Password = password, Age = age });
        connection.Execute("InsertUserProcedure", @Firstname,@Lastname,@Email,@Password,@Age,users);
    }
}

标签: c#mysqldapper

解决方案


以下是适用于大多数 ADO.NET 提供程序的一般指南;它没有考虑任何 MySQL 特性或细微差别(因为我不是 MySQL 用户)

如果存储过程参数与 上的属性完全匹配user,那么您应该能够简单地执行此操作;

connection.Execute(
    "InsertUserProcedure", users, commandType: CommandType.StoredProcedure);

如果有user比存储过程想要的更多的属性,那么一种方法是通过EXEC/间接调用存储过程CALL(作为 a CommandText,这是默认值):

connection.Execute(
    "EXEC InsertUserProcedure @Firstname,@Lastname,@Email,@Password,@Age", users);

(或者在 MySQL 上显然与CALL代替 ,相同EXEC- 见评论)

另一种方法是Select用作投影,允许您直接使用存储过程,但限制传入的属性。:

connection.Execute("InsertUserProcedure", users.Select(u => new {
        u.Firstname, u.Lastname, u.Email, u.Password, u.Age
    }, commandType: CommandType.StoredProcedure);

推荐阅读