深度剖析WinPcap之(六)――驱动程序的初始化与清除(2)
2010-09-04 15:51
281 查看
dr["Addr"].ToString());
}
try{
foreach(DataTable dt2 in ds.Tables)
foreach(DataRow dr in dt2.Rows)
Console.WriteLine(dr["ID"].ToString() + " " + dr["Name"].ToString() + " " + dr["Sex"].ToString() + " " +
dr["Addr"].ToString());
}catch(Exception ex){
Console.WriteLine("dkfjksdjfk");
}
}
}
采用datatable.Rows[i].Delete()删除行后再访问该表时出现出现“不能通过已删除的行访问该行的信息”的错误。原因如下:
Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取消删除。
所以如果要彻底删除datarow,需要Delete()和AccepteChanges()方法同时使用,或者采用datatable.Rows.RemoveAt(i)方法直接删除,其中i表示行索引,还有一个就是datatable.Rows.Remove(DataRow dr)删除指定行。
不过使用datatable.Rows.RemoveAt(i)要注意,如果连续使用datatable.Rows.RemoveAt(0);datatable.Rows.RemoveAt(1);这时并不是删除了原表中的0,1行,而是删除0行后,原来的1行就变成了0行,所以datatable.Rows.RemoveAt(1)实际删除的是原表的2行。
所以还是要慎用datatable.Rows.RemoveAt(i),若要删除多行,可以连续用Delete(),然后采用AccepteChanges()方法确认删除。
相关文章推荐
- 深度剖析WinPcap之(六)――驱动程序的初始化与清除(1)
- 深度剖析WinPcap之(六)――驱动程序的初始化与清除(3)
- 深度剖析WinPcap之(六)――驱动程序的初始化与清除(4)
- 深度剖析WinPcap之(六)——驱动程序的初始化与清除(1)
- 深度剖析WinPcap之(六)——驱动程序的初始化与清除(2)
- 深度剖析WinPcap之(六)——驱动程序的初始化与清除(3)
- 深度剖析WinPcap之(六)——驱动程序的初始化与清除(4)
- 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(1)
- 深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(1)
- 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(5)
- 深度剖析WinPcap之(八)——打开与关闭适配器(15)
- 深度剖析WinPcap之(九)——数据包的发送过程(6)
- 深度剖析WinPcap之(十)——数据包的内核过滤(7)
- jvm原理(7)类加载器与类初始化深度剖析
- 深度剖析WinPcap之(七)――获得与释放网络适配器设备列表(6)
- 深度剖析WinPcap之(八)――打开与关闭适配器(7)
- 深度剖析WinPcap之(八)――打开与关闭适配器(20)
- 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(2)
- 深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(2)
- 深度剖析WinPcap之(八)——打开与关闭适配器(1)