为何使用DataTable中的Select()方法会漏记录?

cnwolfs 2012-03-18 02:47:29
DataTable是我从数据库中查询取得的,然后使用Select()方法查询数据,发现偶尔会漏掉某些记录,打个比方,后台数据库有13条记录,下载到DataTable之后,应该也是有1条记录才对,可是使用相同条件,竟然没查到记录。
where ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0
所有记录中,没有任何字段为null。

mWhere = "where ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0";

System.Data.DataRow[] mMatches = Costaco.Common.GlobeValues.DSContainer.Tables["D1"].Select(mWhere);

这个查询之后,mMatches 的记录数为0,应该是为1才对,为何?

...全文
176 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwolfs 2012-03-20
  • 打赏
  • 举报
回复
找到问题了,是我的分页存储过程有问题,数据源不对,看到记录有足额的条数,但是却是有些重复记录,因此漏掉了一些记录。
select是没有问题的
polk6 2012-03-20
  • 打赏
  • 举报
回复
查询语句有问题吧,
淘淘大师 2012-03-20
  • 打赏
  • 举报
回复
把Where去掉,在Select中直接加入条件就可以了
EnForGrass 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cnwolfs 的回复:]

漏掉的那条记录当然也是满足查询条件的了。
[/Quote]
那就奇怪了,漏掉的那条是不是有什么特殊字符
cnwolfs 2012-03-20
  • 打赏
  • 举报
回复
漏掉的那条记录当然也是满足查询条件的了。
EnForGrass 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cnwolfs 的回复:]

不好意思,内容写错了

mWhere = " ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0";

System.Data.DataRow[] mMatches = Costaco.Common.GlobeValues.DSContainer.Tables["D1"].Select(……
[/Quote]
仔细检查漏掉那一条记录是不是满足nWhere的条件
cnwolfs 2012-03-20
  • 打赏
  • 举报
回复
不好意思,内容写错了

mWhere = " ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0";

System.Data.DataRow[] mMatches = Costaco.Common.GlobeValues.DSContainer.Tables["D1"].Select(mWhere);

没有mWhere的

我可以查到数据,只是会漏记录,例如按条件返回应该是13条记录,可是之返回了12条记录。
q107770540 2012-03-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 cnwolfs 的回复:]
DataTable是我从数据库中查询取得的,然后使用Select()方法查询数据,发现偶尔会漏掉某些记录,打个比方,后台数据库有13条记录,下载到DataTable之后,应该也是有1条记录才对,可是使用相同条件,竟然没查到记录。
where ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0
……
[/Quote]
也可尝试LINQ2DataTable:
var query= Costaco.Common.GlobeValues.DSContainer.Tables["D1"].AsEnumerable()
.Where(d=>d.Field<string>("ContainerNO").EndWith("41")
&& d.Field<int>("Vessel")==286
&& d.Field<int>("Voyage")==15606
&& d.Field<int>("TallyType")==0)
porschev 2012-03-18
  • 打赏
  • 举报
回复

DataTable.Select(string)

select方法参数直接放筛选条件
bdmh 2012-03-18
  • 打赏
  • 举报
回复
Select方法只需要具体的条件即可,不要再加一些where等关键词了
暖枫无敌 2012-03-18
  • 打赏
  • 举报
回复
mWhere = "where ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0";

System.Data.DataRow[] mMatches = Costaco.Common.GlobeValues.DSContainer.Tables["D1"].Select(mWhere);

没有where 关键字,请去掉后试试
EnForGrass 2012-03-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 cnwolfs 的回复:]
DataTable是我从数据库中查询取得的,然后使用Select()方法查询数据,发现偶尔会漏掉某些记录,打个比方,后台数据库有13条记录,下载到DataTable之后,应该也是有1条记录才对,可是使用相同条件,竟然没查到记录。
where ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0
……
[/Quote]
mWhere = "where ContainerNO like '%41' and Vessel = 286 and Voyage = 15606 And TallyType = 0";把where删除了
dalmeeme 2012-03-18
  • 打赏
  • 举报
回复
估计你的mWhere里用了不支持的运算符或关键字,才会“漏”。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧