【问题标题】:Handling a large ADODB record set in data table?处理数据表中的大型 ADODB 记录集?
【发布时间】:2013-11-23 23:48:53
【问题描述】:

我正在将大约 300 万行(ADODB 记录集)的大型结果集加载到数据表中。甚至将结果集加载到数据表中都需要很长时间。我想找到一种仅提取部分结果集然后将其加载到 DataTable 中的方法。或者,有没有办法直接读取记录集而不是将其加载到数据表中然后读取它?

这是我用来填充数据表的代码 -

OleDbDataAdapter oleDA = new OleDbDataAdapter();
DataTable dt = new DataTable();
oleDA.Fill(dt, myADODBRecordset);

【问题讨论】:

  • 取决于...您是否有权访问数据库查询或存储过程?你想一次处理一批数据吗?
  • @StinkyTowel - 我可以访问数据库查询。但是,我不想编辑它。无论如何,我仍然渴望了解我的问题的所有可能解决方案。
  • 您是否可以考虑使用 System.Data.OleDb.OleDbDataReader msdn.microsoft.com/en-us/library/… 这将只允许前向访问数据,但意味着您不必将整个数据集加载到内存中。
  • @SamPlusPlus - 我有一些问题。你能帮我回答吗? - 它能够从 ADODB 记录集中读取数据吗?有什么方法可以控制我一次可以读取的行数吗?是否涉及任何类型的磁盘缓存?谢谢。
  • @blasto 如何获取您的数据集?您可以使用数据阅读器而不是获取 ADODB 记录集吗?

标签: c# .net-3.5 adodb


【解决方案1】:

以下是一些可供考虑的选项:

  1. 只获取您真正需要处理的行和列。

  2. 获取一些数据,让用户在需要时请求下一组行。

  3. 编写优化的 SQL 查询

  4. 除非必须,否则不要使用 DataTable,因为它包含比其他列表类型对象更多的元数据信息。

  5. 考虑使用托管的 .NET 提供程序。

【讨论】:

  • 我已经在做 1 和 2。我不知道 3 是什么意思。 4 - 我需要迭代记录集,就好像它是内存中的数据库表一样。是否有其他课程可以做到这一点? 5. 那是什么?
【解决方案2】:

为什么要将这么大的数据加载到内存中?大数据事务必须消耗大量资源,所以优化你的代码,或者使用 EF。

【讨论】:

  • 什么是 EF ?没听说过。
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 2014-10-23
  • 2023-04-02
  • 2011-04-26
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
相关资源
最近更新 更多