DataTable.Select()方法的一个困惑,或者是一个bug?
来源:互联网 发布:mac 蓝牙 编辑:程序博客网 时间:2024/05/17 03:53
ADO.NET中的组件 DataTable 模拟了数据库中的表,该类提供的 Select() 方法也模拟了SQL语句的部分功能(非全部)。最近,笔者在做一个查询时发现了一个怪异现象,貌似与 Select() 方法的查询顺序或结合顺序有关。见如下代码:
DataTable dt = new DataTable();
dt.Columns.Add("A", typeof(string));
dt.Columns.Add("B", typeof(string));
dt.Rows.Add("6", "0600");
DataRow[] r1 = dt.Select("A = '6' and (B not like '06%' and B not like '02%')"); // 结果行数为0
DataRow[] r2 = dt.Select("A = '6' and (B not like '02%' and B not like '06%')"); // 结果行数为1
针对上述情况,笔者做了如下测试验证:
- 使用 SQL Server 2008 做了类似表和类似的SQL查询语句做查询,结果行均为0。
- 去掉 A='6' 的代码,即 dt.Select("(B not like '02%' and B not like '06%')") 等形式,结果行均为0。
- 条件句带左右括号,即 dt.Select("A = '6' and (B not like '02%') and (B not like '06%')") 等形式,结果行均为0。
上述测试结果令笔者感到困惑,这个现象到底是 DataTable.Select() 的 bug呢还是有没介绍的语法规则或执行顺序?从这个问题也看出来一个基本的编程风格,即逻辑语句中带括号简化表达式是十分有用、有效和正确的。
笔者的测试环境为:Visual Studio 2010、.NET Framework 4.0、Windows7。
0 0
- DataTable.Select()方法的一个困惑,或者是一个bug?
- 解决了一个困惑很久的bug
- 一个自认为是程序员的困惑
- DataTable的Select方法
- DataTable的Select方法
- DataTable的Select方法
- mysql 存储过程的一个bug或者是我…
- 一个初学者的困惑
- 一个新手的困惑
- JAXB+Socket的一个Bug(或者算一个Feature吧)
- 原来是一个bug
- 一个DataTable赋值给另一个DataTable的常用方法
- 可能是 ID3DXSprite 的一个bug。
- 可能是ReadFile的一个Bug
- 这是Solaris10的一个Bug
- 又是一个坑爹的BUG
- NameNotFoundException:原来是Tomcat7的一个bug
- 貌似是微软编译器的一个Bug
- SAT阅读强化
- linux curl 命令详解,以及实例
- 【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。
- 模拟浏览器以HTTP请求方式用JUnit4完成功能接口的单元测试
- ubuntu 安装MySQL
- DataTable.Select()方法的一个困惑,或者是一个bug?
- Java 实现zip格式的文件压缩与解压
- 配置,编译
- 好贴地址
- js数字或字母的正则表达式
- ETL工具kettle源码编译
- linux shell 按行循环读入文件方法
- 6月份的计划
- #job 57