2013年4月12日金曜日

vb DataTable.Clear と DataTable.Rows.Clear. の違い

vb DataTable.Clear と DataTable.Rows.Clear. の違い

古い.Net 1.1バージョン、同じだったらしい。 DataRowCollection.Clearの処理の中、DataTable.Clearを呼び出す。

.Net 2.0違は違います。


参考In .Net 1.1, DataRowCollection.Clear calls DataTable.Clear
However, in .Net 2.0, there is a difference. If I understand the source correctly, DataTable.Clear will clear unattached rows (created using DataTable.NewRow) whereas DataRowCollection.Clear won't.
The difference is in RecordManager.Clear (source below, from the .Net Reference Source for v3.5 SP 0); clearAll is true only when called from DataTable.Clear.
    internal void Clear(bool clearAll) { 
        if (clearAll) {
            for(int record = 0; record < recordCapacity; ++record) { 
                rows[record] = null;
            }
            int count = table.columnCollection.Count;
            for(int i = 0; i < count; ++i) { 
                //

                DataColumn column = table.columnCollection[i]; 
                for(int record = 0; record < recordCapacity; ++record) {
                    column.FreeRecord(record); 
                }
            }
            lastFreeRecord = 0;
            freeRecordList.Clear(); 
        }
        else { // just clear attached rows 
            freeRecordList.Capacity = freeRecordList.Count + table.Rows.Count; 
            for(int record = 0; record < recordCapacity; ++record) {
                if (rows[record]!= null && rows[record].rowID != -1) { 
                    int tempRecord = record;
                    FreeRecord(ref tempRecord);
                }
            } 
        }
    }

0 件のコメント:

コメントを投稿