【问题标题】:ASP.NET Duplicate records getting inserted in databaseASP.NET 重复记录被插入数据库
【发布时间】:2014-05-30 18:02:57
【问题描述】:

我们有一个调查网络应用程序,它会在用户完成调查后随机插入重复的调查记录。

我试图通过重定向到一个confirmation.aspx 页面来解决这个问题,因此当用户点击F5 时调查页面不会被重新发布。该修复有效。

但是,我们注意到重复记录仍在进入,有时相隔 20 分钟,有时一分钟。

如果你点击返回按钮,确认页面不会让用户返回,所以它只会返回确认页面。

以下是重复记录的示例:

CustomerSurveyID    CustURL SurveyType  SentDate    SubscriberID    ResponseDate    CustomerID
2665    http://survey.xxx.com/ConsumerSurvey.aspx?17157&281600783&2&2014-05-27T00:00:00 2   2014-05-27 00:00:00.000 17157   2014-05-29 16:36:41.787 281600783
2666    http://survey.xxx.com/ConsumerSurvey.aspx?17157&281600783&2&2014-05-27T00:00:00 2   2014-05-27 00:00:00.000 17157   2014-05-29 16:37:08.027 281600783

我们不知道最终用户会做些什么来导致这些重复项插入到数据库中。有没有可能发生的原因?

【问题讨论】:

  • 您至少需要提供一些代码。您如何保存数据?

标签: asp.net sql-server webforms


【解决方案1】:

40-爱 我会引导您阅读这篇出色的文章。正如您将看到的,有几个选项可以解决您的问题。此处讨论了所有解决方案。我建议使用两个,

Response.Redirect(Request.Url.ToString(), false) 

和 Sql 异常来捕获重复。这可能需要更改您的数据库。

http://aspalliance.com/articleViewer.aspx?aId=687&pId=-1

【讨论】:

    【解决方案2】:

    我猜是用户点击后退按钮并再次插入记录,这就是您可能会得到重复记录的原因。

    我的建议是:-

    1)一旦用户插入记录,所有控件的值都会被重置为空白,这样如果他/她再次尝试点击插入按钮,就可以避免重复输入。 2) 并在 page_load 事件上调用一个 reset() 函数,该函数会将所有控件值重置为其默认值。

    【讨论】:

      【解决方案3】:

      如果您提供代码来显示数据何时插入到您的流程中的数据库中,将会有所帮助。在没有看到您的代码的情况下,我假设您出于某种原因需要留在同一页面上,而不是在提交表单时重定向到确认页面或类似性质的东西。重定向将是最简单的解决方案。如果这不可行,请确保插入数据的代码位于检查页面是否首次呈现的块内。

      if(!isPostback())
      {
          /*Database Handling Code Here*/
      }
      

      【讨论】:

        【解决方案4】:

        问题是他们同时打开了两个浏览器窗口,并且他们在两个不同的窗口上点击了完成按钮,因此插入了两次。

        在这种情况下,Response.Redirect 无效。

        这种情况下的解决方案是在正在更新的表中创建一个唯一索引。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 2020-11-28
          • 2019-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多