2013-04-04 58 views
2

作爲我在辦公室需求的一部分,Im需要編寫一個C#控制檯應用程序,該應用程序從Oracle CRM ON Demand服務器提取批量數據並將其推送到本地Oracle數據庫。這是批量插入Oracle數據庫的最有效方式?

現在,經過很多研究,我決定使用ODP.NET的數組綁定功能,這從我的理解中提供了最佳性能。

但問題在於,我需要拉出的數據每個記錄/行總共有超過50個字段/列。所以我需要創建很多字符串數組?

我可以使用具有50列以上的數據表而不是字符串數組來實現相同的(數組綁定)嗎?如果是這樣,怎麼樣? (我已經做了足夠的研究,找不到解決方案)我知道我可以使用OracleBulkCopy類,但是從我讀到的內容來看,它的效率並不高,而且與Array Binding相比性能差。

另外,如果我使用這麼多的數組,我的應用程序是否仍然有效?因爲當我與同事討論這個選項時,他們聲稱它不是一個好的設計,因此在你的應用程序中有這麼多的數組。

以上問題讓我陷入了過去的幾天,任何人都可以請幫我用我的問題的最佳解決方案嗎?我需要儘快修復這個問題。

回答

1

但是,這裏有問題,我需要拉動的數據總共有超過50場/列/記錄/行。所以我需要創建很多字符串數組?

不幸的是,是的。我有完全相同的問題,我沒有找到比你所建議的更好的解決方案。僅當您想使用傳統的ADO.NET時,DataTable纔是一個選項。

不要擔心性能:我的應用程序每天使用Array Binding插入2000萬行,並且我沒有性能或內存問題。但我同意你的同事們,代碼並不漂亮。

+0

謝謝你的迴應。 – user2243353 2013-04-05 05:37:15

+0

因此,如果我按照自己的選擇繼續使用數組綁定,那麼我必須採取任何預防措施來釋放數組可能需要的內存? 另外,事後考慮,列表是比數組更好的選擇嗎? – user2243353 2013-04-05 05:43:37

+0

垃圾回收器會爲你釋放內存,不用擔心。只有在事先不知道要插入多少行的情況下(鏈接的)列表纔會是更好的選擇:它可能更簡單,更直觀,可以直接爲您的陣列分配合適的大小,並且可以使用for循環來迭代你處理的數據。 – schglurps 2013-04-05 09:13:33