• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
目标驱动者
目标........努力........生活.........
博客园    首页    新随笔    联系   管理    订阅  订阅

今天被"雷"到了!

写程序时一定要小心.是字符类型的查询表达式一定要加引号

 

花了2个小时调试一个不是BUG的BUG,被前辈的地雷给炸到了.

事情由来:大家都熟悉DataTable.Select()方法,这个方法的作用相当于SQL中的select,

此方法的参数是个string类型,但是内容则是个expression,即相当于SQL中WHERE 后面的简单条件判断子句,

但是先前的程序是这样子写的:

Code
tblTableName.Select(String.Format("SectionID={0}", sectionID))

 一开始sectionID都是<100的数,sectionID在数据库中是nvarchar类型,在XML中映射为STRING类型,当sectionID>100时,这个方法就读不出sectionID>100的数据了,其余<100的都能读出,且DATASET里也显示有这个表的所有数据,但是在数据库中用SQL语句也能读出正确的数据来,经过排查发现问题出在表达式上.正确的为:

Code
tblTableName.Select(String.Format("SectionID='{0}'", sectionID))

原因是:String类型的查询都要加引号以区分数据是字符还是数字.因为字段是字符类型,所以不管在哪都要加引号,虽然有时在数据库中string类型的数据为数字时这种情况对查询没影响,但是在程序当中就不一定是正常的,当数据变化时就成了一个BUG了.

吸取此教训,写程序时一定要小心.是字符类型的查询表达式一定要加引号,

posted @ 2008-11-04 11:58  IsionWu  阅读(235)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3