【问题标题】:How can I store dataset() in Application variable?如何将 dataset() 存储在 Application 变量中?
【发布时间】:2014-03-14 22:14:18
【问题描述】:

是否可以创建一个可以存储 DataSet() 的应用程序状态? 我想创建可供任何用户使用的 DataSet 变量。我该怎么做?

谢谢!

【问题讨论】:

  • 为什么要给用户一个数据集?
  • 我希望每个登录的用户都被添加到公共表中,其中将包含他的 IP 地址、用户名和登录时间。*我不想为此使用数据库- 我想使用应用程序状态变量 *

标签: c# asp.net class dataset application-state


【解决方案1】:

这只是设置的问题

 if(Application["myGlobalDataset"] == null)
     Application["myGlobalDataset"] = LoadMyDataSet();

不过,请仔细阅读 MSDN(粗体字是我的)

应用程序状态是一个可供所有人使用的数据存储库 ASP.NET 应用程序中的类。应用程序状态存储在 服务器上的内存,比存储和检索更快 数据库中的信息。与会话状态不同,会话状态特定于 单个用户会话,应用程序状态适用于所有用户和 会议。因此,应用程序状态是一个有用的存储位置 少量经常使用的数据,不会从一个用户更改为 另一个

初始化变量的好地方是在global.asax.cs 文件中的Application_Start 事件中

void Application_Start(object sender, EventArgs e) 
{
     if(Application["myGlobalDataset"] == null)
        Application["myGlobalDataset"] = LoadMyDataSet();
}

记得在Application_End事件中销毁它

void Application_End(object sender, EventArgs e) 
{
    //  Code that runs on application shutdown
     if(Application["myGlobalDataset"] != null)
        Application["myGlobalDataset"].Dispose();
}

如果您打算修改数据集的内容,请记住您需要防止对变量的并发访问,因此需要锁定机制。

 try
 {
     Application.Lock()
     Dataset ds = Application["myGlobalDataset] as Dataset;
      ......
  }
  finally
  {
      Application.UnLock()
  }

锁会一直持续到页面终止处理或超时,但是我仍然更喜欢将所有内容包含在 try/finally 块中

【讨论】:

  • 现在为了向表中添加新行,我只需要将 Application 变量视为 DataSet 变量?
  • 现在,如果您打算修改此数据集,则会出现其他问题,例如并发访问同一变量。
  • 我找不到 global.asax 文件。如何创建一个?
  • 右键单击解决方案资源管理器并选择添加新项,然后添加全局应用程序类项
  • 非常感谢!!那非常有帮助!我试试看。
【解决方案2】:

所以您只想将 DataSet 存储在应用程序变量中?

Application["YourDataSet"] = YourDataSetVariable.

从您的其他 cmets 中,最好将其存储在 Session 变量中,因为您似乎要不断更新信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多