今天被"雷"到了!
花了2个小时调试一个不是BUG的BUG,被前辈的地雷给炸到了.
事情由来:大家都熟悉DataTable.Select()方法,这个方法的作用相当于SQL中的select,
此方法的参数是个string类型,但是内容则是个expression,即相当于SQL中WHERE 后面的简单条件判断子句,
但是先前的程序是这样子写的:
Code
一开始sectionID都是<100的数,sectionID在数据库中是nvarchar类型,在XML中映射为STRING类型,当sectionID>100时,这个方法就读不出sectionID>100的数据了,其余<100的都能读出,且DATASET里也显示有这个表的所有数据,但是在数据库中用SQL语句也能读出正确的数据来,经过排查发现问题出在表达式上.正确的为:
Code
原因是:String类型的查询都要加引号以区分数据是字符还是数字.因为字段是字符类型,所以不管在哪都要加引号,虽然有时在数据库中string类型的数据为数字时这种情况对查询没影响,但是在程序当中就不一定是正常的,当数据变化时就成了一个BUG了.
吸取此教训,写程序时一定要小心.是字符类型的查询表达式一定要加引号,