【问题标题】:DataTable row limit数据表行数限制
【发布时间】:2012-03-02 10:50:34
【问题描述】:

早上,

关于下面的引用,这个限制是否与有多少列无关? (我假设没有,但它没有在任何地方特别说明。)如果它与列数相关,你如何计算你没有超过这个限制?

要向 DataTable 添加行,您必须首先使用 NewRow 方法返回一个新的 DataRow 对象。 NewRow 方法返回具有 DataTable 架构的行,因为它由表的 DataColumnCollection 定义。 DataTable 可以存储的最大行数为 16,777,216。有关详细信息,请参阅向 DataTable 添加数据。

"Link to where quote was taken from."

感谢您的帮助。

【问题讨论】:

  • 我也假设不是。每个 DataRow 都是一个单独的对象,因此 DataTable 的结构合理地独立于它们的内容。

标签: c# c#-4.0


【解决方案1】:

我希望该限制(即 224)与列数无关。我希望它在内部只是一个 32 位整数用于表示行数,因为 24 位和 8 位用于标志或类似的东西。

在实践中,1600 万行将需要 很长 时间来填充和 很多 内存...如果您有达到该限制的危险,您可能应该重新考虑如何开始访问数据。

【讨论】:

  • 感谢您的回复。我打算使用数据表通过批量复制将文本文件中的数据上传到 sql 服务器。我担心我要上传的数据量会超过这个限制,所以我打算在几个任务中拆分数据表+检查每个任务数据表是否超过这个限制。以上是不是一个糟糕的方法?
  • @HansRudel:老实说,无论如何,我会将数据分成比这更少的行数。我自己没有使用过 SQL Server 大容量复制,但我希望如果您将其拆分为(例如)100,000 行的部分,显示定期反馈等会更容易。
  • @HansRudel - 您甚至不需要使用 C# 来执行此操作 - SQL Server 提供直接 CSV 导入工具。
  • @Mr Skeet:非常感谢您的帮助/建议,非常感谢。
  • 有了这么多数据,您想实现自己的 IDataReader 并将其传递给 SqlBulkCopy。不要使用中间的DataTable,那样会很浪费。
【解决方案2】:

它与列数无关,除非您的内存有上限,因此如果您有太多列,您无法将行存储在内存中,您可能会出现内存不足错误。

【讨论】:

    【解决方案3】:

    您可以使用 DataTable.Rows.count 在添加新行之前检查当前行数

    【讨论】:

    • 这与问题无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2018-06-27
    相关资源
    最近更新 更多