积极答复者
?DataTable.Select返回的行全部为null

问题
-
- 已移动 笨笨ONEModerator 2009年5月20日 2:14 ([Loc]From:.NET Framework 相关)
- 已移动 微软中文技术论坛Moderator 2009年5月20日 2:18 转移帖子 ([Loc]From:.NET Framework 一般性问题讨论区)
- 已移动 Sheng Jiang 蒋晟Moderator 2011年7月31日 3:29 (发件人:.NET Framework 一般性问题讨论区)
答案
全部回复
-
可以通过在线的 MSDN 获得帮助:http://msdn2.microsoft.com/zh-cn/library/
DataTable 只是将表格化数据表示为内存中的一个包含行、列和约束的表格,如果说它本身的设计有问题,那么现在 .NET Framework 版本号已经 3.5 了,我相信不会不修正吧,所以我们在这里的讨论先排除这个原因。
因为最初运行一段时间没有问题而之后出错,可以由此判断,在运行过程中对数据的增删操作存在误差,应该结合系统环境综合评定到底是哪里的错误。
DataTable.Select 方法请参考文档。
-
不知道你使用什么方法来“删除”DataTable中的数据的,某些删除方法只是将DataTable的某行的状态置为Deleted,而DataTable中实际上继续保持对这个“被删除”的行的引用,某些删除方法则是物理的将某行从DataTable的Rows集合中移除。
另外你用Select的那个参数版本的重载?因为上面删除方式的不同,加上你用Select方法的重载版本的不同,你有可能会Select出来那些被标记为Deleted的但又继续被DataTable引用的行,从而导致DataTable的Rows.Count = 0而Select返回1700行。
-
RickyLin 写: 不知道你使用什么方法来“删除”DataTable中的数据的,某些删除方法只是将DataTable的某行的状态置为Deleted,而DataTable中实际上继续保持对这个“被删除”的行的引用,某些删除方法则是物理的将某行从DataTable的Rows集合中移除。
另外你用Select的那个参数版本的重载?因为上面删除方式的不同,加上你用Select方法的重载版本的不同,你有可能会Select出来那些被标记为Deleted的但又继续被DataTable引用的行,从而导致DataTable的Rows.Count = 0而Select返回1700行。
我使用的是DataRowCollection Remove (DataRow row),MSDN说"调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。", 而Select 使用的是DataTable.Select (String) ,如果System.data中本身没问题没理由出现这种情况的.
-
今天才发现关于 DataTable 的 FIX 还真不少。
由此看来还真是 DataTable 本身的问题,之前没注意,实在不好意思。