c# - 有没有办法在 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);
}
}
解决方案
以下是适用于大多数 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);
推荐阅读
- java - 从实际上是 url 的查询参数中避免 JSP 页面中的 xss 的最佳方法是什么?
- flutter - 如何为 statefulwidget 创建小部件测试
- google-chrome - 如何修复 Puppeteer 的唯一保证工作的 Chrome 版本是 xyz 错误?
- java - 在 Java 中重构重载的简单方法
- python - 将句子列表拆分为单词并将它们附加到字典
- android - Flutter:flutter pub get 和 flutter packages get failed
- twitter-bootstrap - 纱线更新产生警告“> bootstrap@4.6.0”具有不正确的对等依赖性“popper.js@^1.16.1”
- r - 如何根据 R 中的行值删除矩阵的列?
- mysql - 当我尝试在 phpmyadmin 中创建表时,Phpmyadmin 抛出错误“#1067 - 'end_time' 的默认值无效”
- powerbi - 需要有关 PowerBI 可视化和 DAX/查询的帮助 - 按天显示每个作业的利用率