中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > Asp > 综合文章
可恶的Bug(一)
作者:未知 时间:2004-12-07 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

昨晚Debug倒凌晨三点,为的是一个+1错误。也就是出来的结果比预想中的结果多一或者少一了。

       为了这个Bug苦苦挣扎了4个小时,因为它不是每次都发生,经过反复的试验,发现在操作DataSet的时候只有删除一行的时候,才会出现这个+1错误。于是开始单步跟踪,查看内存中的数据,聚精会神一个半小时,没有发现任何错误,数据完全和想象中的一样,可为什么写到数据库中的时候数据就变掉了?难道SqlDataAdapterbug

       在没有确认之前,我还是认定这个Bug是自己的。经过仔细观察,确实在最后一步写入数据库的时候出现了问题,明明是 32 写到数据库中变成了 31 …

       无语了我……

       仔细一想我这个字段是AutoIncrement的,莫非是这个问题?

       经过反复摸索终于发现了问题所在,哈哈!很多问题真是说穿了就这样,但是在说穿之前……唉!

       从数据库表中读入数据填入DataSet,表取名“Columns”。此时内存中的“Columns”和数据库中的“Columns”完全一样,包括Id字段的AutoIcrement属性。此时Id字段的最大值是30,自增种子是31

       现在操作内存中的“Columns”。插入两行,删除前面那行。此时内存中的“Columns”的Id字段的最大值应该是32,子增种子是33Id31的那行被删去)。但是这些操作物理数据库中的“Columns”并不知道。

       现在调用SqlDataAdapterUpdate方法。在写入数据库中的时候子增字段是忽略传入数据的,它的值完全根据自增种子确定。所以写入数据库的时候虽然传入32但由于物理数据库中的“Columns”中Id字段的子增种子是31所以忽略传入的32,所以32就莫名其妙的变成了31

       找到了问题所在,那解决起来当然也是方便的。只是第一次遇到这种问题,感觉谁遇到这样的问题都会郁闷的。这个问题有点价值,所以记录下来。给还没有遇到这个问题的同行提个醒:)

 

 

       Debug就和追美女一样,过程是痛苦的,结局是幸福的。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有