在我的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
答案 0 :(得分:0)
在任何关系数据库可以对它们执行任何操作之前,必须将对象映射到表和列。对象不是关系。
您没有说明存储过程所期望的参数。
如果它是一个需要大量对象的INSERT或UPDATE,我想知道存储过程是否是正确的答案。您必须重复调用它,一次为集合中的每个对象写入行。我会考虑准备好的语句,绑定变量和批处理,这样你就可以一次性完成。
该套装是单一工作单位吗?您是否考虑过交易行为?