0

我不太确定这个问题应该如何表达,所以如果我问错了,请耐心等待。

我正在编写一个使用 VB 作为语言背后的代码的 ASP.NET 应用程序。我有一个连接到数据库的数据访问类来运行查询(当然是参数化的),还有另一个类来执行验证任务——我从我的 aspx 页面访问这个类。

我想要的是能够存储数据服务器端并等待用户根据数据的有效性从几个选项中进行选择。但是除非我的理解完全不正确,否则当多个用户连接时,服务器上的持久数据对象会出现问题吗?

我的最终目标是,一旦数据经过验证,最终用户就无法修改它。目前我正在验证数据,但我仍然必须在用户说好的之后从网络表单中检索它,这显然留下了意外(不太可能)或故意(也不太可能使用)注入不良数据的可能性,但我不想冒险)。

所以我完全不理解吗?如果是这样,有人可以向我指出一个资源,该资源提供一些关于在服务器上保留持久数据的说明,或者提供说明?

谢谢!


具体示例:

我们最近聘请了检查员 Gadget 为路标检查员插入数据,他们巡视高速公路路标,确保没有一个路标被嚼泡泡糖或被盗,他们通常是青年市议会的正直成员。

如果 Gadget 可以证明他的勇气,那么他可能会被提升去做实际的标志检查。目前,他唯一的工作就是访问这个 Intranet 站点,输入有关最近检查的信息。安装和检查标志的区、县、路线#、路段和日期。

当然,我们这些 80 年代末还活着的人都熟悉 Gadgets 的无能。因此,该网站几乎可以作为我们可以制作的小工具证明。区/县/路都是通过下拉列表填写的,他只需要手动输入路段的开始和结束以及日期。有时他会摸索鼠标并最终交换部分的开头和结尾,doh!因此文本变为红色以提醒他注意错误。不幸的是,他今天选择戴上他的防红太阳镜,将所有红色变成黑色。好吧,在尝试提交数据后,它会向他显示一条错误消息,告诉他在哪里以及需要修复什么。不幸的是,他用手指敲了敲键盘,没有输入 1.337,而是输入了 13.37(英里)——而这条路只有 10 英里长!出色地,现在会弹出一条消息(模态 div)并告诉他道路的实际里程为 0-10,并且他的输入将结合道路的三个部分。然后他有三个按钮可供选择。Cancel 允许他去修改他的数据,Constrain 将 13.37 转换为 10,而 Override 将允许他输入该数据。

“约扎!” 小工具惊呼一声,点击取消返回并修复他的错误。好吧,他正确输入的下一组数据,因此弹出了一条确认消息,显示他将要进行的更改并询问是否可以继续。好吧,不幸的是,Inspector Gadget 打翻了他的咖啡杯,碎屑散落在他的桌子上。在他匆忙清理它之前,他点击了“确定”,但在他的 Go-Go-Gadget 电磁铁不小心翻转了他电脑上的几个位之前,将县的表格从 ARKANSAS 更改为 AKRSANAS,呵呵!

如果数据存储在整个校园的服务器上,并且传递的唯一信息是“确定”或“取消”,则可以避免这种情况。


当然,我总是可以在“OK”之后再次验证,但这似乎是一个 hacky 解决方法。

无论如何,我希望这能澄清!

4

2 回答 2

1

我认为您指的是Concurrency。查看链接以开始理解它,如果这是您所问的。根据您的后端和您的具体情况,您可能需要做更多的研究。同样,如果这是您正在寻找的内容,您可能对悲观并发特别感兴趣。

http://en.wikipedia.org/wiki/Concurrency_control


编辑:阅读您的示例后....听起来您可能想要执行以下操作,祝您好运。

  1. 当用户输入数据访问记录时,使用某种悲观并发模式(在数据库上,因为这是数据实际所在的位置)“锁定”记录。这就像使数据库记录只读。

  2. 当用户点击确定时,您可能必须通过 asp.net 代码进行验证,如果通过验证,则更新 db 并解锁 db 记录。

  3. 如果用户点击取消,不要更新数据库记录,只需解锁它。

  4. 如果用户想强制输入,那么只需更新数据库并解锁数据库记录。

于 2010-05-28T15:08:06.810 回答
0

我认为您正在考虑使用网络服务器的缓存。在 ASP.NET 中,您可以使用 Context.Cache 在服务器上存储数据。一旦一个用户缓存了它,服务器上的任何其他用户也可以访问它。

由于数据缓存在服务器上,因此您希望每次在数据库上调用更新查询时都清除缓存。然后下次加载数据时,可以再次将数据保存在缓存中。

在您的选择方法中,检查您的 Cache[key] 是否不为空。如果是,则从数据库中加载数据,然后在返回数据之前将其保存到 Cache[key] 中。如果它不为空,则只需从缓存而不是数据库中加载它。

您使用的密钥可以包含您的参数,因此您不必从缓存中过滤数据......或者密钥可以只是通用的,因此它可以存储您的所有数据。然后您可以对数据执行 LINQ 查询以过滤您的参数

我希望这会有所帮助。

于 2010-05-28T15:03:20.530 回答