我正在编写一个从 C# MVC 项目调用的 MySQL 存储过程,它将接收一些参数来进行酒店预订。
我遇到的问题是,对于 MySQL 存储过程,传递对象列表的最佳方法是什么。
我的一个想法是在调用存储过程之前,我可以在一些临时表中预先保存所需的数据,并使用一个可以在存储过程中调用的唯一键来进行酒店预订,它可以获取所有来自临时表的数据。
您可能会问,为什么我不调用多个存储过程,但出于完整性目的,我将使用 MySQL 事务。
最佳答案
You might ask, why don't I just call multiple stored procedures, but for integrity purposes, I will be using MySQL Transactions.
这是一个有趣的原因。考虑以下代码:
using (MySqlConnection c = new MySqlConnection("cstring"))
{
c.Open();
var t = c.BeginTransaction();
try
{
foreach (var o in list)
{
using (MySqlCommand cmd = new MySqlCommand("EXECUTE sp @field1, @field2", c, t))
{
cmd.Parameters.AddWithValue("@field1", o.field1);
cmd.Parameters.AddWithValue("@field2", o.field2);
cmd.ExecuteNonQuery();
}
}
t.Commit();
}
catch (Exception ex)
{
t.Rollback();
// do something with ex
}
}
这是一个多次访问数据库的连续事务。虽然我不完全理解您的应用程序、负载或要求,但在我看来,如果您只是做这样的事情,它会很好地满足您的需求。只有当您处理数百万的事务时,往返次数才开始变得重要。
关于c# - 如何将数据列表从 C# 传递到 MySQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489447/