我的网站有一个设置,当应用程序启动一个名为SiteContent的模块是“创建”的。这将运行一个清除功能,基本上从数据库中删除任何不相关的数据,以防从先前运行的功能中留下任何不相关的数据。“随机”发生的错误
该模块具有Manager类的实例 - 即RangeManager,CollectionManager,DesignManager。还有其他的,但我会用这些作为例子。每个Manager类都包含一系列项目 - 项目可以是Range,Collection或Design类型,无论哪一个都是相关的。然后将每个范围的数据读入范围,集合或设计的实例。我知道这基本上是复制数据 - 效率不是很高,但是它是我目前的最后一年项目,所以我可以随时将它改为使用Linq或稍后类似的东西,当时我没有受到一个月期限的压力。
我有一个表单,点击Save按钮,通过调用SiteContent.RangeManager.Create(vars)或SiteContent.RangeManager.Update(Range As Range,vars)(或其他管理器类的等价物,无论哪一个碰巧是相关的)。
这些函数调用存储过程以在相关表中插入或更新。
类范围,集合和设计都具有诸如名称,描述,显示和其他几个属性。当创建或更新函数被调用时,管理器循环遍历所有其他项目以检查是否已经存在具有相同名称的项目。 Update函数确保它不会将正在更新的项目与自己进行比较。如果找到另一个具有相同名称的项目,则会引发自定义异常(ItemAlreadyExistsException)。
出于某种奇怪的原因,如果我在编辑模式下进入范围,集合或设计,更改某些内容并尝试更新它,它偶尔不会更新该项目。当我偶尔说我的意思是每3 - 4页加载,有时更多。在什么时候或为什么发生,我完全没有看到任何模式。我有一个try-catch语句捕获ItemAlreadyExistsException,并在捕获时输出“具有此名称的项目已存在”。偶尔它会输出这个;其他时间不会。
有没有人知道为什么会发生这种情况?也许是某人曾经犯过并解决过的错误?
我曾经使用正则表达式来将名称与 - 我相信它是[a-zA-Z] {1,100}(1到100个小写或大写字符之间)进行比较。出于某种原因,我正在开发该网站的客户用于获取错误,表示其格式不正确。但是他可以在5分钟后尝试相同的文本,并且工作正常。我认为这可能是同一个问题,因为这两个问题都是随机发生的。
非常感谢提前。
问候,
理查德·克拉克
编辑:经过大量的时间花在缩小的代码,我已经决定要等到我的兄弟,谁一直是程序员至少8年超过我,复活节回来,让他看看它。如果他不能解决这个问题,那么我会把这些文件压缩起来放在某个地方供人们访问,然后去看看。
我将其缩小到可能的最小文件数,并且仍然存在。这似乎是每隔10次。话虽如此,我强制经理班每刷新10页或5分钟(以较早者为准)。我可能会研究这一点 - 这可能会导致问题。基本上每个管理器都包含一个对象数组。该数组使用数据库中的数据填充。 Update函数获取该项目的一个实例,并为该对象设置新的值。如果碰巧是数组被重置的页面加载(即数据从数据库中新加载),那么具有相同ID的对象实例将不会与传入的实例相同。这解释了它的事实抛出一个ItemAlreadyExistsException现在和然后。这一切都是有道理的,我现在想的就越多。如果我要传入要更改的对象的ID,而不是对象本身,那么它应该完美地工作。我会回答这个问题,如果我解决它..
几乎是不可能没有看到你的代码来诊断。请发布重复此问题的最少量代码。 – womp 2010-03-30 21:10:36
同意,你使用哪种数据库,MySQL?是存储为myisam,innodb等表格。你在表单中使用method =“post”而不是method =“get”...只是为了确保浏览器不会缓存结果... – 2010-03-30 21:16:44
嗯这就是问题 - 它会花费大量的时间来缩小它,因为它全部绑定到数据库和存储过程等等。 我只是试着编辑一个集合,它告诉我一个项目已经存在同名。 CollectionManager中只有一个引发此异常的地方,但其他所有集合都没有相同的名称。我使用的每个集合作为集合在项目中,然后如果String.Compare(__ Collection.Name,Collection.Name,True(IgnoreCase))= 0抛出New ItemExistsException()..我没有看到任何问题。 Regards, Richard – ClarkeyBoy 2010-03-30 21:20:17