ASP.NET重复记录插入数据库中

时间:2014-05-30 18:02:58

标签: asp.net sql-server webforms

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

我尝试通过重定向到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

我们不知道最终用户可以做什么来使这些重复项插入数据库。是否有可能发生的原因?

4 个答案:

答案 0 :(得分:1)

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

我的建议是: -

1)一旦用户插入记录,将所有控件值重置为空白,这样如果他/她再次尝试单击插入按钮,则避免重复输入。 2)在page_load事件中调用一个reset()函数,它将所有控件值重置为默认值。

答案 1 :(得分:1)

40爱 我会指导你阅读这篇优秀的文章。正如您将看到的,您的问题有多种选择。这里讨论所有解决方案。我建议使用两个,

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

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