为 Web 应用程序创建全局变量 - ASP.NET

Posted

技术标签:

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

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

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

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

我有两个问题:

    如何声明?

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

谢谢!

ps

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

【问题讨论】:

您不使用 db IDENTITY 列的原因是什么? 关于你的 PS - 我建议问一个新问题。 【参考方案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 对数据库的性能影响相当普遍。

以上是关于为 Web 应用程序创建全局变量 - ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章

C语言局部变量全局变量,局部静态变量,全局静态变量,extern,static的区别

ASP.NE网站发布注意事项

在 asp.net 和 Join 语句中连接到 Access 数据库

ASP.NET Web API 身份验证(Web + 移动)

JSP 全局脚本变量

python第四周