【发布时间】:2010-03-30 21:03:05
【问题描述】:
我的网站有一个设置,当应用程序启动时,会“创建”一个名为 SiteContent 的模块。这会运行一个清除函数,该函数基本上会从数据库中删除任何不相关的数据,以防之前运行的函数留下任何数据。
该模块具有管理器类的实例 - 即 RangeManager、CollectionManager、DesignManager。还有其他的,但我将仅以这些为例。每个 Manager 类都包含一个项目数组 - 项目可能是 Range、Collection 或 Design 类型,无论哪个是相关的。然后将每个范围的数据读入 Range、Collection 或 Design 的实例。我知道这基本上是在复制数据 - 效率不是很高,但这是我目前的最后一年项目,所以我可以随时将其更改为使用 Linq 或类似的东西,当我没有一个月的最后期限压力时。
我有一个表单,在单击“保存”按钮时,它通过调用 SiteContent.RangeManager.Create(vars) 或 SiteContent.RangeManager.Update(Range As Range, vars) (或其他管理器类的等效项,以任何一个为准)来保存数据一个恰好是相关的)。
这些函数调用存储过程在相关表中插入或更新。
类 Range、Collection 和 Design 都具有 Name、Description、Display 等属性。当调用 Create 或 Update 函数时,Manager 会遍历所有其他项目以检查是否已存在同名项目。 Update 函数确保它不会将正在更新的项目与自身进行比较。如果找到另一个具有相同名称的项目,则会引发自定义异常 (ItemAlreadyExistsException)。
出于某种奇怪的原因,如果我在编辑模式下进入 Range、Collection 或 Design,更改某些内容并尝试更新它,它偶尔不会更新该项目。当我说偶尔我的意思是每 3 - 4 个页面加载,有时更多。我完全看不到它发生的时间或原因。我有一个 try-catch 语句,它捕获 ItemAlreadyExistsException,并在捕获时输出“具有此名称的项目已经存在”。偶尔它会输出这个;其他时候不会。
有谁知道为什么会发生这种情况?也许是某人以前犯过并解决过的错误?
我曾经使用正则表达式来比较名称 - 我相信它是 [a-zA-Z]{1, 100}(介于 1 到 100 个小写或大写字符之间)。出于某种原因,我正在为其开发网站的客户经常收到错误消息,称其格式不正确。然而,他可以在 5 分钟后尝试相同的文本,并且效果很好。我认为这很可能是同一个问题,因为这两个问题都是随机发生的。
非常感谢。
问候,
理查德·克拉克
编辑:在花了很多时间缩小代码范围后,我决定等到我的兄弟,他做程序员至少比我多 8 年,复活节来让他看看在它。如果他不能解决,我会把文件压缩起来,放在某个地方供人们访问和尝试。
我将它从字面上缩小到尽可能少的文件数,但它仍然会发生。似乎大约每 10 次。话虽如此,我强制管理器类每 10 个页面加载或 5 分钟刷新一次(以较早者为准)。我可能会调查这个 - 这可能会导致问题。基本上每个 Manager 都包含一个对象数组。该数组是使用数据库中的数据填充的。 Update 函数采用项目的一个实例和要为该对象设置的新值。如果它恰好是重置数组的页面加载(即从数据库中新加载的数据),那么具有相同 ID 的对象实例将不会与传入的对象实例相同。这解释了这样一个事实:它不时抛出 ItemAlreadyExistsException。现在我越想越明白。如果我要传入要更改的对象的 ID,而不是对象本身,那么它应该可以正常工作。如果我解决了这个问题,我会回答..
【问题讨论】:
-
几乎不可能在没有看到您的代码的情况下进行诊断。请发布最少的重复问题的代码。
-
同意,你使用什么样的数据库,MySQL?是存储为 myisam、innodb 等的表。您是否在表单中使用 method="post" 而不是 method="get" ...只是为了确保浏览器不会缓存结果...
-
嗯,这就是问题所在 - 缩小它可能需要几个小时,因为它都与数据库和存储过程等相关联。我只是尝试编辑一个集合,它告诉我已存在同名的项目。 CollectionManager 中只有一个地方会引发此异常,但其他集合都没有相同的名称。我使用 For Each Collection As Collection In Items,然后 If String.Compare(__Collection.Name, Collection.Name, True (IgnoreCase)) = 0 Throw New ItemExistsException().. 我看不出有什么问题。问候,理查德
-
我使用的是 SQL Server 2008(带有 Web Developer 2008)。错误随机发生在服务器上的测试和实时站点上。我会尝试找一些地方来共享文件,这样我就可以把相关的文件放在那里,并附上自述文件来帮助设置数据库。我对这种事情不太了解,所以有人对我可以在哪里共享文件有任何想法吗?问候,理查德
标签: .net asp.net vb.net exception exception-handling