在MySQL中,如何将一组对象传递给存储过程?

时间:2014-12-24 16:10:23

标签: c# mysql stored-procedures

在我的C#代码中,我将填充一个Dictionary。 我需要以最有效的方式将数据放入MySQL表中。

是否可以将其传递给MySQL存储过程?我想我可以用逗号等字符串传递它,这样存储过程就可以调用一个函数来解析字符串并填充表格,但这很痛苦。

还有其他想法吗?

谢谢!

根据到目前为止的评论,让我尝试显示我正在处理的代码/ sudocode。 构建字典的代码如下所示:

        private void DistributeCallsToReschedule()
    {
        CallTimeSpacing = GetNumMinutesInNextCallWindow() / callsToReschedule.Count;

        DateTime currTimeToCall = new DateTime(); 
        foreach (int id in callsToReschedule)   
        {
            CallIdTimeToCallMap.Add(id, currTimeToCall);
            currTimeToCall.AddMinutes(CallTimeSpacing);
        }
    }

因此,字典可以包含我的条目。

我希望我能做的是将字典传递给存储过程,如下所示。 如果这不可能,那么执行存储过程指示的最有效方法是什么?即 存储过程希望有一个表来加入,其中包含来自C#代码中填充的dictonary的数据。换句话说,什么是将字典数据放入MySQL表中的最有效方法?如果这是不可能的,我必须循环,那么最有效的方法是什么:迭代调用存储过程?构建一个包含所有值的预准备语句(我猜想通过StringBuilder构建)?

通过C#代码存储过程的参数:
    @CallIdTimeToCallMap

将@CallIdTimeToCallMap放入CallIdTimeToCallMapTable;

更新cr      设置cr.TimeToCall = map.TimeToCall 来自callRequest cr 内连接CallIdTimeToCallMapTable映射      cr.id = map.id

1 个答案:

答案 0 :(得分:0)

在任何关系数据库可以对它们执行任何操作之前,必须将对象映射到表和列。对象不是关系。

您没有说明存储过程所期望的参数。

如果它是一个需要大量对象的INSERT或UPDATE,我想知道存储过程是否是正确的答案。您必须重复调用它,一次为集合中的每个对象写入行。我会考虑准备好的语句,绑定变量和批处理,这样你就可以一次性完成。

该套装是单一工作单位吗?您是否考虑过交易行为?