【问题标题】:Creating Global Variable For Web Application - ASP.NET为 Web 应用程序创建全局变量 - ASP.NET
【发布时间】:2011-05-31 14:44:53
【问题描述】:

我正在构建我的 Web 应用程序以连接数据库。 到目前为止,我已经设法处理它,(尽管我没有构建 BLL 和 DAL)。

我有一个包含“id”列的表。我知道有一种方法可以在 SQL Server 中声明它以自动递增。 (但我不想要它)。

我想声明一个保存该值的全局应用程序变量。

我有两个问题:

  1. 如何声明?

  2. 我在哪里创建并初始化它? (我有几个登录页面)。

谢谢!

ps

如果有人能告诉我如何使用我的存储过程构建 DAL,那将会很有帮助? 我需要你使用我在 DAL 中无法做到的 BLL?

【问题讨论】:

  • 您不使用 db IDENTITY 列的原因是什么?
  • 关于你的 PS - 我建议问一个新问题。

标签: asp.net sql-server global-variables data-access-layer bll


【解决方案1】:

您可以使用Application 对象 - 它是HttpContext 的一部分,可在任何页面上直接访问。

如果您不想使用它,您可能需要编写一个包含静态成员的Globals 类(或任何您喜欢的名称)。

public class Globals
{
  public static int Counter { get; set;}
}

// accessed from other classes:
Globals.Counter++;

任何一种方法都不适用于您拥有一个网络场或多个网络应用程序,并且无法在重新启动后继续存在。


无论这些选项如何,正确的解决方案(即使您不想使用它 - 您能解释一下原因吗?)是使用带有 IDENTITY 子句的 ID 字段。

【讨论】:

  • 我现在开始对应用程序进行测试,并且身份不断增加?
  • @RonenIL - 这不是你想要的吗?
【解决方案2】:

存储变量是容易的部分。管理您自己的 ID 生成以及争用和并发问题是困难的部分。祝你好运。

【讨论】:

    【解决方案3】:

    在 ASP.NET 中确实没有全局变量这样的东西。请记住,HTTP 是无状态的。

    最接近的方法是在 Application 对象中存储一些东西:

    Application["myvar" ] = x;
    x = Application["myvar"];
    

    但即使在这里,当应用程序需要重新启动时,这个变量也会丢失,它可以不时地这样做。

    您所描述的更好的解决方案是数据库值。

    【讨论】:

      【解决方案4】:

      递增一个整数,然后将递增后的 ID 扔到数据库中是充满危险的。多线程?应用程序弹跳时会发生什么? dev 和 prod 部署是否共享同一组数字?

      听起来您需要一个全局唯一标识符,并且可以在数据库之外创建。这听起来像是 GUID 的工作。当然,它在数据库中占用了更多空间,但这可能不是您要对数据库做的最糟糕的事情。

      【讨论】:

      • GUID 在数据库中的索引也很差。有一些技巧可以使伪 GUID 变得更容易索引,但它们有点痛苦。作为 PK 的 GUID 对数据库的性能影响相当普遍。
      猜你喜欢
      • 2022-12-18
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多