2012-03-02 83 views
1

朝、DataTable行の制限

次の引用に関して、この制限は列の数とは無関係ですか? (Imはどこにも明記されていないと仮定していると仮定します)。列の数にリンクされている場合、この限界を越えていないことをどのように計算しますか?

DataTableに行を追加するには、まずNewRowメソッドを使用して新しいDataRowオブジェクトを返す必要があります。 NewRowメソッドは、テーブルのDataColumnCollectionで定義されているように、DataTableのスキーマを持つ行を返します。 DataTableが格納できる行の最大数は16,777,216です。詳細については、「DataTableへのデータの追加」を参照してください。あなたの助けのための

"Link to where quote was taken from."

感謝。

+0

私もそうではないと想定しています。各DataRowは個別のオブジェクトであるため、DataTableの構造はそれらの内容とは無関係です。 –

答えて

5

制限(2 )は、列の数とは無関係になると予想します。私はそれが単なる32ビットの整数であることを期待しています。内部的には、行数を24ビットとして表現するために使用され、8ビットはフラグなどに使用されます。実際に

16万行を取り込むとメモリの多くする長い時間がかかるとしている...あなたはその制限を打つの危険にさらされている場合、あなたはおそらく「どのようにあなたを再考する必要があります開始するためにデータにアクセスし直してください。

+0

返信いただきありがとうございます。私はDatatableを使用して、テキストファイルからSQL Serverにバルクコピーを介してデータをアップロードする予定でした。私はアップロードしようとしていたデータの量がこの制限を超えてしまうので、データセットをいくつかのタスクの中に分割し+それぞれのタスクのデータテーブルがこの制限を超えていないことを確認する予定でした。 上記は貧弱なアプローチですか? –

+0

@HansRudel:正直言って、データをそれよりも少ない数の行に分割します。 SQL Serverの一括コピーは使用していませんが、10万行のセクションに分割すると、定期的なフィードバックなどを表示しやすくなると思います。 –

+1

@ HansRudel - これを行うためにC#を使用する必要はありません.SQL Serverは直接CSVインポート機能を提供します。 – Hogan

0

メモリに上限がある場合を除いて、列の数にはリンクされていません。したがって、列が非常に多い場合、行をメモリに保存できないため、メモリ不足のエラーが発生する可能性があります。

+0

これを明確にしていただきありがとうございます。 –

0

DataTable.Rows.countを使用して、新しい行を追加する前に現在の行数を確認することができます。

+0

これは質問とは関係ありません。 – Hogan