今天在閱讀一個項目中的代碼時,發現刪除DataTable的數據時用的dataTable.Clear(); 由於以前自己習慣都是用dataTable.Rows.Clear();因此突然感覺到很茫然,難道這兩者有啥不一樣?於是一陣百度,Bing搜索,在加上Reflector的幫助,結論如下:
1,dataTable.Clear()和dataTable.Rows.Clear() 都是刪除全部的表數據,但不會刪除表結構(列信息 ),使用時不必做區分,任選其一都可以。
2,DataTable.Reset方法。將全部數據和表結構(列信息)都刪除。
3,用DataRow.Delete()方法刪除行后,DataTable的行數不會變,在foreach語句中仍然可以遍歷到刪除的行,但是不能訪問行中的值, 會報System.Data.DeletedRowInaccessibleException的異常。
4,DataTable.GetChanges() 方法也可以取到刪除后的行,但是也不能訪問行中的值,會報異常。
5,DataTable沒有顯示實現IDisposable接口,對dataTable.Dispose() 的調用實際上是調用的DataTable的一個父類MarshalByValueComponent的 Dispose() 方法,由於這個原因,Dispose() 方法不會清除DataTable的行數據。因此,如果要完全銷毀一個DataTable,可以這樣寫代碼:
dataTable.Clear(); dataTable.Dispose(); dataTable = null;