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
原创粉丝点击