代码之家  ›  专栏  ›  技术社区  ›  Wayne Werner

ASP.NET服务器数据持久性

  •  0
  • Wayne Werner  · 技术社区  · 14 年前

    我不太清楚这个问题应该如何措辞,所以如果我问错了请耐心点。

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

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

    我的最终目标是一旦数据被验证,最终用户就不能修改它。目前,我正在验证数据,但在用户说“确定”之后,我仍然需要从Web表单中检索数据,这显然会导致意外(不太可能)或故意(也不太可能用于使用,但我宁愿不冒险)插入坏数据的可能性。

    那么,我是否完全不理解?如果是这样,有人能给我指出一个资源,它提供一些关于在服务器上保存持久数据的指令,还是提供指令?

    谢谢!


    具体示例:

    最近,我们聘请了检查人员Gadget为检查公路标志的检查人员插入数据,以确保这些标志没有被泡泡糖嚼坏或被盗,而泡泡糖嚼通常是青年市议会的正派成员。

    如果小玩意能证明他的能力,那么他可能会被提升到做实际的标志检查。目前,他唯一的工作就是到这个内部网站输入最近检查的信息。区、县、路线、路段以及安装和检查标志的日期。

    当然,我们中的任何一个80年代末还活着的人都熟悉电子产品的不成熟。所以这个网站就像我们做的小器具一样。地区/县/路线都是通过下拉列表填写的,他只需手动输入区段的开始和结束以及日期。有时他摸索着鼠标,结果换了开始和结束部分,多哈!所以文本变成红色,提醒他这个错误。不幸的是,他今天选择了戴反红色太阳镜,把所有的红色变成黑色。好吧,在尝试提交数据之后,它会向他显示一条错误消息,告诉他在哪里需要修复以及需要修复什么。不幸的是,他用手指敲击键盘,而不是输入1.337,而是输入13.37英里(英里)-而这条路只有10英里长!好吧,现在一条消息(一个modal div)突然出现,告诉他这条路的实际里程是0-10,他的入口将结合这条路的三个部分。然后给他三个按钮供选择。cancel,它允许他去修改他的数据,constraint,它将把13.37转换为10,override允许他输入数据。

    “YOWZA!”Gadget喊道,然后点击Cancel(取消)返回并纠正了他的错误。好吧,下一组数据他输入正确,所以一个确认消息弹出显示他将要做的更改,并询问是否可以继续。好吧,不幸的是,盖德探长打翻了他的咖啡杯,把碎屑撒在桌子上。在他匆忙清理的过程中,他点击了“好的”,但在他的Go Gadget电磁铁意外地在他的电脑上翻转了一些位之前,他并没有把这个县从阿肯色州改成阿克拉萨纳州,多哈!

    如果数据存储在校园内的服务器上,而传递的唯一信息是“确定”或“取消”,那么就可以避免这种情况。


    当然,我可以一直验证 再一次 在“确定”之后,但它看起来像是一个老掉牙的解决方案。

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

    2 回复  |  直到 14 年前
        1
  •  0
  •   Ed B    14 年前

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

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

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

    您使用的密钥可以包含您的参数,这样您就不必从缓存中过滤数据了……或者该密钥可以只是通用的,所以它可以存储您的所有数据。然后您可以对数据执行LINQ查询以筛选参数

    我希望这有帮助。

        2
  •  1
  •   AGoodDisplayName    14 年前

    我想你指的是 并发性 . 查看链接,开始了解它,如果这是你所要求的。根据您的后端和具体情况,您可能需要做更多的研究。再说一次,如果这是你要找的,你可能对 悲观的 并发性。

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


    编辑: 读完你的例子……听起来你可能想做以下的事情,祝你好运。
    1. “锁定”记录 using a pessimistic concurrency pattern of some kind (在数据库上,因为这是数据实际所在的位置)当输入数据的用户访问它时。这就像使数据库记录为只读。

    2. 当用户点击OK时,您可能需要通过ASP.NET代码进行验证,如果验证通过,则更新数据库并解锁数据库记录。

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

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