当前位置: 代码迷 >> .NET Framework >> ADO.NET中DataTable的Select步骤的奇怪bug
  详细解决方案

ADO.NET中DataTable的Select步骤的奇怪bug

热度:76   发布时间:2016-05-01 23:35:08.0
ADO.NET中DataTable的Select方法的奇怪bug
VS2010,

.NET2.0

System.Data2.0.0

SQL SERVER2005

WIN2003 Server

使用vb.NET编写了一个CLR函数,成功部署进了SQL2005数据库,运行一直良好,但最近发现一个很奇怪的问题,跟踪之后发现如下问题:

我们用

_DataSource.Tables("DataSource").Select(sql)

来返回Datarow集合._Datasource是一个DataSet,包含一个"DataSource"的DataTable,_DataSource.Tables("DataSource")的数据是

rowid='BAE936EC-E89E-43C0-945C-90883A621BCD'
TaxType='无证店'
PackageType='新入网存费送机'
三个字段的类型都是String,其中rowid是主键

但当sql为下面的代码时返回了1行数据(为浏览方便用回车符分隔了代码,实际代码中没有回车符)


ISNULL(TaxType,'') not In('小规模纳税人') 
AND ISNULL(PackageType,'') not In('老客户存费续网送机','新入网存费送机','老客户自备机续网') 
AND rowid ='BAE936EC-E89E-43C0-945C-90883A621BCD'

但当我调整sql中条件的顺序时却返回0行


rowid ='BAE936EC-E89E-43C0-945C-90883A621BCD'
AND ISNULL(TaxType,'') not In('小规模纳税人') 
AND ISNULL(PackageType,'') not In('老客户存费续网送机','新入网存费送机','老客户自备机续网')

或者我删除三个条件中的任何一个条件也是能返回正确的结果.

sql中字段的大小写与数据中的字段完全一致.用不用ISNULL函数结果不变.

请问因sql条件顺序不同造成的结果不同是怎样产生的?

并且如何解决这个奇怪的问题?(不通过调整sql逻辑的顺序)
------解决方案--------------------
关键在于你的AND前后是否有空格

a__and__b
------解决方案--------------------
(ISNULL(TaxType,'') not In('小规模纳税人'))
AND (ISNULL(PackageType,'') not In('老客户存费续网送机','新入网存费送机','老客户自备机续网')) 
AND (rowid ='BAE936EC-E89E-43C0-945C-90883A621BCD')

这样咧
  相关解决方案