2014-12-24 30 views
-1

在我的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

回答

0

您有任何關係型數據庫之前,將對象映射到表和列可以對他們做任何事情。物體不是關係。

你不說什麼參數是存儲過程期望的。

如果它是一個INSERT或UPDATE,期望一大組對象,我不知道存儲過程是否是正確的答案。您必須重複調用它,一次爲集合中的每個對象寫入行。我會考慮準備好的聲明,綁定變量和批處理,以便您可以在一次往返中執行此操作。

該集合是一個單一的工作單位?你有沒有想過交易行爲?

+0

謝謝,duffymo。該參數基本上是對象列表,其中對象具有兩個字段。這個想法是將它們插入到MySQL中的表格中,該表格包含這兩列。我絕對想要對數據庫進行一次調用,因此準備好的語句會比多次調用存儲過程更有效(我認爲是,但希望得到您的意見)。通過「配料」,你是什麼意思?是的,我會在一次交易中做到這一點。 – BlackRockJohnny

+0

HTTP不知道或關心對象列表。每個實例都是表中的一行。您必須將對象數據轉換爲表和列,併爲每個對象調用一次INSERT每行。 – duffymo

相關問題