1

我正在编写一个从 C# MVC 项目调用的 MySQL 存储过程,它将接受许多参数来进行酒店预订。

我遇到的问题是,对于 MySQL 存储过程,传递对象列表的最佳方法是什么。

我的一个想法是在调用存储过程之前,我可以将所需的数据预先保存在一些临时表中,并使用可以在存储过程中调用的唯一键进行酒店预订,它可以从临时表中获取所有数据表。

你可能会问,我为什么不直接调用多个存储过程,但是为了完整性,我将使用 MySQL Transactions。

4

1 回答 1

0

你可能会问,我为什么不直接调用多个存储过程,但是为了完整性,我将使用 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
    }
}

这是一个多次访问数据库的连续事务。虽然我不完全了解您的应用程序、负载或要求,但在我看来,如果您只是做这样的事情,它会很好地满足您的需求。只有当您处理数百万笔交易时,往返次数才开始变得重要。

于 2013-07-05T13:05:27.670 回答