注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

汇总技巧

你快乐我快乐.... 汇集各类技巧,传播技巧,让我们共同熟练运用技巧..

 
 
 

日志

 
 

可恶的Bug(一)  

2011-06-07 12:50:04|  分类: ◆ASP技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

昨晚Debug倒凌晨三点,为的是一个+1错误。也就是出来的结果比预想中的结果多一或者少一了。
 为了这个Bug苦苦挣扎了4个小时,因为它不是每次都发生,经过反复的试验,发现在操作DataSet的时候只有删除一行的时候,才会出现这个+1错误。于是开始单步跟踪,查看内存中的数据,聚精会神一个半小时,没有发现任何错误,数据完全和想象中的一样,可为什么写到数据库中的时候数据就变掉了?难道SqlDataAdapter有bug?
 在没有确认之前,我还是认定这个Bug是自己的。经过仔细观察,确实在最后一步写入数据库的时候出现了问题,明明是 32 写到数据库中变成了 31 …
 无语了我……
 仔细一想我这个字段是AutoIncrement的,莫非是这个问题?
 经过反复摸索终于发现了问题所在,哈哈!很多问题真是说穿了就这样,但是在说穿之前……唉!
 从数据库表中读入数据填入DataSet,表取名Columns。此时内存中的Columns和数据库中的Columns完全一样,包括Id字段的AutoIcrement属性。此时Id字段的最大值是30,自增种子是31。
 现在操作内存中的Columns。插入两行,删除前面那行。此时内存中的Columns的Id字段的最大值应该是32,子增种子是33(Id为31的那行被删去)。但是这些操作物理数据库中的Columns并不知道。
 现在调用SqlDataAdapter的Update方法。在写入数据库中的时候子增字段是忽略传入数据的,它的值完全根据自增种子确定。所以写入数据库的时候虽然传入32但由于物理数据库中的Columns中Id字段的子增种子是31所以忽略传入的32,所以32就莫名其妙的变成了31。
 找到了问题所在,那解决起来当然也是方便的。只是第一次遇到这种问题,感觉谁遇到这样的问题都会郁闷的。这个问题有点价值,所以记录下来。给还没有遇到这个问题的同行提个醒:)
 Debug就和追美女一样,过程是痛苦的,结局是幸福的。

  评论这张
 
阅读(73)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017