在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

+0

为什么要使用存储过程而不是简单的插入语句? –

+0

您可以创建一个函数,该函数接受一个List 对象,并且该函数的内部具有执行插入操作的foreach循环,为什么不只是创建一个简单的插入存储过程..显示您迄今为止尝试过的或您尝试的操作通过代码来做... – MethodMan

您有任何关系型数据库之前,将对象映射到表和列可以对他们做任何事情。物体不是关系。

你不说什么参数是存储过程期望的。

如果它是一个INSERT或UPDATE,期望一大组对象,我不知道存储过程是否是正确的答案。您必须重复调用它,一次为集合中的每个对象写入行。我会考虑准备好的声明,绑定变量和批处理,以便您可以在一次往返中执行此操作。

该集合是一个单一的工作单位?你有没有想过交易行为?

+0

谢谢,duffymo。该参数基本上是对象列表,其中对象具有两个字段。这个想法是将它们插入到MySQL中的表格中,该表格包含这两列。我绝对想要对数据库进行一次调用,因此准备好的语句会比多次调用存储过程更有效(我认为是,但希望得到您的意见)。通过“配料”,你是什么意思?是的,我会在一次交易中做到这一点。 – BlackRockJohnny

+0

HTTP不知道或关心对象列表。每个实例都是表中的一行。您必须将对象数据转换为表和列,并为每个对象调用一次INSERT每行。 – duffymo