2013-04-04 56 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