在MySQL中,如何将一组对象传递给存储过程?
在我的C#代码中,我将填充一个Dictionary。 我需要以最有效的方式将数据存入MySQL表中。在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);
}
}
因此,字典可以包含我的条目。
我能做的就是将字典传递给存储过程,如下所示。 如果这不可行,那么执行存储过程指示的最有效方法是什么;即 存储过程希望有一个要JOIN的表,该表具有来自填充在C#代码中的dictonary的数据。换句话说,在MySQL中将字典数据存入表格的最有效方法是什么?如果这是不可能的,并且我必须循环,那么最有效的方法是什么:迭代调用存储过程?构建一个具有所有值的准备好的语句(通过StringBuilder构建,我想)?
参数传递给该存储过程BY C#代码:
@CallIdTimeToCallMap
将@CallIdTimeToCallMap到CallIdTimeToCallMapTable;
更新CR 集cr.TimeToCall = map.TimeToCall 从callRequest CR 内部联接CallIdTimeToCallMapTable地图上 cr.id = map.id
您有任何关系型数据库之前,将对象映射到表和列可以对他们做任何事情。物体不是关系。
你不说什么参数是存储过程期望的。
如果它是一个INSERT或UPDATE,期望一大组对象,我不知道存储过程是否是正确的答案。您必须重复调用它,一次为集合中的每个对象写入行。我会考虑准备好的声明,绑定变量和批处理,以便您可以在一次往返中执行此操作。
该集合是一个单一的工作单位?你有没有想过交易行为?
谢谢,duffymo。该参数基本上是对象列表,其中对象具有两个字段。这个想法是将它们插入到MySQL中的表格中,该表格包含这两列。我绝对想要对数据库进行一次调用,因此准备好的语句会比多次调用存储过程更有效(我认为是,但希望得到您的意见)。通过“配料”,你是什么意思?是的,我会在一次交易中做到这一点。 – BlackRockJohnny
HTTP不知道或关心对象列表。每个实例都是表中的一行。您必须将对象数据转换为表和列,并为每个对象调用一次INSERT每行。 – duffymo
为什么要使用存储过程而不是简单的插入语句? –
您可以创建一个函数,该函数接受一个List对象,并且该函数的内部具有执行插入操作的foreach循环,为什么不只是创建一个简单的插入存储过程..显示您迄今为止尝试过的或您尝试的操作通过代码来做... –
MethodMan