将应用程序级数据保存到数据库的最佳实践(ASP.NET)

时间:2013-06-05 13:12:00

标签: asp.net sql-server ajax state

我们有一个非常大的HTML表单(> 100个字段),用用户输入的数据更新SQL Server数据库。用户需要很长时间才能填写表单,但他们提交的每条信息对业务流程都非常有价值。即使用户放弃表单,我们也希望保留他们输入的所有内容。

我们计划将onblur事件附加到每个字段,并使用jQuery / AJAX立即将每个数据发布回应用程序服务器。那部分非常简单。我们遇到的问题是何时以及如何最好地将此应用程序级别的信息保存到数据库中。同样,我们的优先事项是数据保留而不是性能,但我们也希望尽可能高效地完成此任务。

我看到的选项是:

  1. 让Web服务立即将每个数据发布到数据库服务器。
  2. 将信息存储在应用程序服务器上的自定义类中,然后定期调用更新方法将新数据发布到数据库。
  3. 以查看或会话状态存储信息,然后运行例程将此信息发布到数据库服务器。
  4. 我们没有想过的其他东西。
  5. 选项1似乎最明显是故障安全的,但也是最耗费资源的。选项2看起来最优雅,但是我们可以绝对确定自定义类实例在没有首次运行其更新方法的情况下无法销毁吗?

    感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

恕我直言,我真的把表格分成几个部分(如果可能的话)。由于这是ASP.Net,如果您使用的是Web Forms,那么请考虑使用wizards(将表单切割为逻辑Steps

您可以在没有表单向导的情况下执行相同的操作,但仍然会将流程切换为客户端的逻辑步骤。您可以在纯JavaScript中执行此操作,但如果您使用框架(jQuery,Knockout等)可能会更容易 - 概念保持不变,将表单输入过程切换为部分(又称“步骤”) - 例如使用显示切换,每个“步骤”的div等。

  • “保留所有内容,即使稍后放弃”:假设步骤是“分层的”,其中“最关键”的输入在开头。这使得“步骤”方法变得更加重要 - 这是一个“逻辑组”(您真正想要的输入),因此如果您执行Step方法,那么您可以将此数据(此“步骤”)保存到DB中您认为合适的时尚(例如Ajax,或ASP.Net Post / postback)。

... H个

答案 1 :(得分:0)

我会在一些xml或数据集(.getxml)中打包所有内容并将xml传递给存储过程....

How to pass XML from C# to a stored procedure in SQL Server 2008?

也许可以将调用放在后台线程上。

http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6

xml将比逐行调用值(RBAR)更快。 您可以只保存xml,或者将xml分解为关系表。