我正在编写一个从 C# MVC 项目调用的 MySQL 存储过程,它将接受许多参数来进行酒店预订。
我遇到的问题是,对于 MySQL 存储过程,传递对象列表的最佳方法是什么。
我的一个想法是在调用存储过程之前,我可以将所需的数据预先保存在一些临时表中,并使用可以在存储过程中调用的唯一键进行酒店预订,它可以从临时表中获取所有数据表。
你可能会问,我为什么不直接调用多个存储过程,但是为了完整性,我将使用 MySQL Transactions。
我正在编写一个从 C# MVC 项目调用的 MySQL 存储过程,它将接受许多参数来进行酒店预订。
我遇到的问题是,对于 MySQL 存储过程,传递对象列表的最佳方法是什么。
我的一个想法是在调用存储过程之前,我可以将所需的数据预先保存在一些临时表中,并使用可以在存储过程中调用的唯一键进行酒店预订,它可以从临时表中获取所有数据表。
你可能会问,我为什么不直接调用多个存储过程,但是为了完整性,我将使用 MySQL Transactions。
你可能会问,我为什么不直接调用多个存储过程,但是为了完整性,我将使用 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
}
}
这是一个多次访问数据库的连续事务。虽然我不完全了解您的应用程序、负载或要求,但在我看来,如果您只是做这样的事情,它会很好地满足您的需求。只有当您处理数百万笔交易时,往返次数才开始变得重要。