在所有形式中使用来自DataTable的数据



在类中,我执行一个存储过程并返回一个DataTable。

public DataTable getUserInfo(int abid)
    {
        DataTable tbl = new DataTable();
        string constring =ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constring))
        {
            using (SqlCommand cmd = new SqlCommand("getUserInfo", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@ABID", abid);
                SqlDataAdapter adap = new SqlDataAdapter(cmd);
                adap.Fill(tbl);  
            }
        }
        return tbl;
    }

然后在default.aspx.cs页面后面的代码中,我调用类并使用foreach循环获得所需的所有数据。

            DataTable tbl = new DataTable();
            tbl = u.getUserInfo(abid);
            foreach (DataRow row in tbl.Rows)
            {
                string firstName = row["firstName"].ToString();
                string lastName = row["lastName"].ToString();
                string fullname = row["fullname"].ToString();
                string Phone = row["phone"].ToString();  
            }

如果我只需要使用本页中的数据,则此解决方案有效。我需要在项目的不同页面使用相同的数据。当然,我可以每次都调用这个类,创建不同的数据表,并将它们存储在不同的变量中,但我知道这不是很有效。我相信有更好的办法。

是否有一种方法,我可以创建全局变量?例如,我加载数据表到这些变量,我可以在整个项目中使用它们?或者其他的解决方案?

谢谢

如果该数据在不同用户之间共享,则使用缓存对象。看到:ASP。. NET缓存:技术和最佳实践。

但如果该数据对每个用户都是唯一的,则将该信息存储在Session对象中。但是请记住,会话是为服务器上的每个用户维护的,如果你在会话中保存了太多的数据,那么它将需要更多的Server资源。

看到:ASP。. NET会话状态概述

将信息存储在Session

//To store
Session["UserInfo"] = tbl;

检索

DataTable tbl = Session["UserInfo"] as DataTable;
if (tbl != null)
{
    //Datatable found;
}

Session对象可以在多个页面上访问。

您还可以使用其他选项来维护ASP中跨页面的状态。Net,像Cookies。看到ASP。. NET状态管理概述

Web是无状态的,这意味着每次将页面发布到服务器时都会重新创建一个新的Web页面类实例。众所周知,HTTP是一种无状态协议,它不能在页面上保存客户端信息。

如果用户插入一些信息并移动到下一页,则该数据将丢失,并且用户将无法检索该信息。我们需要存储信息。Session提供了在服务器内存中存储信息的工具。它可以支持任何类型的对象与我们自己的自定义对象一起存储。对于每个客户机,会话数据是单独存储的,这意味着会话数据是在每个客户机的基础上存储的。请看下面的图表:

使用会话的状态管理是最好的ASP。NET特性,因为它是安全的,对用户透明的,我们可以在其中存储任何类型的对象。

优点:

  1. 帮助维护整个应用程序的用户状态和数据。
  2. 它很容易实现,我们可以存储任何类型的对象。
  3. 单独存储客户端数据
  4. 会话对用户来说是安全透明的。

缺点:

  1. 在大量数据/用户情况下的性能开销,因为会话数据存储在服务器内存中。
  2. 序列化和反序列化会话数据的开销,因为在StateServer和SQLServer会话模式的情况下,我们需要在存储它们之前序列化对象。
参考

:1. http://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net

我建议您实现延迟加载解决方案。

由于静态成员在对应用程序的所有请求之间共享,因此您可以缓存您知道不会更改的数据。显然,您必须小心缓存太多或太长时间,否则将会出现内存问题。您还必须考虑并发性。

这里有一个简化的例子:创建一个代表用户的类,然后创建一个静态方法LoadByID(int id)和一个静态Dictionary来存储已经加载的用户。然后,当页面请求用户时,如果条目已经存在,则从缓存中向用户提供该条目。

//... user instance fields ...
private static Dictionary<int, User> cache = new Dictionary<int, User>();
private static object lockObj = new object();
public static User LoadByID(int id)
{
    lock (lockObj) //Prevent double-adding items
    {
        if (cache.ContainsKey(id))
        {
            return cache[id]; //We've already loaded the record.
        }
        else
        {
            //Some function that actually calls the database
            //and constructs user objects
            User loaded = LoadUserInternal(id);
            cache.Add(id, loaded)
            return loaded;
        }
    }
}
private static User LoadUserInternal(int id)
{
    //Load and construct the user
}

相关内容

  • 没有找到相关文章

最新更新