为 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.net 和 Join 语句中连接到 Access 数据库