c# - 如何将数据列表从 C# 传递到 MySQL 存储过程

标签 c# mysql stored-procedures

我正在编写一个从 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/

相关文章:

c# GroupPrincipal.GetMembers 性能问题

php - 在 htaccess 上使用更具体的重写工具

php - 获取今天的记录实际上是在 PHP 和 MySQL 中获取昨天的记录

mysql - SQL 错误 1630 : Function SUBSTRING does not exist.。嗯?

java - Oracle JDBC/PL SQL/类型/包级别/无效名称模式

c# - Form.Parent 和 StartPosition.CenterParent

c# - 二进制文件不是用调试信息构建的

mysql - 涉及时区时如何与mysql进行时间比较?

MySQL 5.6 程序通过 Workbench 的验证器但无法工作,错误代码 : 1064

c# - Windows Phone 是否有可用的编码器/解码器将 Wav 转换为 Mp3,将 Mp3 转换为 Wav?