将多个值存储在会话变量中

时间:2011-01-09 09:43:43

标签: c# .net asp.net

在我提出问题之前,请考虑以下情况:我网站上的用户有profileID。有一些pluginID与此profileID相关联。

例如:User1可能有2个,3个和5个插件与他的个人资料相关联。

当用户登录时,我将用户的profileID存储在会话变量cod中。在某个页面上,用户尝试编辑与其个人资料相关联的plugins。因此,在该页面上,我必须从数据库中检索那些pluginID

我已应用此代码,但这只从数据库获取最大pluginID而不是所有pluginID

SqlCommand cmd1 = new SqlCommand("select plugin_id from profiles_plugins where id=(select id from profiles_plugins where profile_id=" + Convert.ToInt32(Session["cod"]) + ")", con);
SqlDataReader dr1 = cmd1.ExecuteReader();
if (dr1.HasRows)
{
  while (dr1.Read())
  {
    Session["edp1"] = Convert.ToInt32(dr1[0]);
  }
}
dr1.Close();
cmd1.Dispose();

我试图找出如何在此会话变量中存储多个pluginID

由于

2 个答案:

答案 0 :(得分:5)

首先将值读取到列表或数组,然后存储列表或数组:

using(SqlCommand cmd1 = new SqlCommand("select plugin_id from profiles_plugins where id=(select id from profiles_plugins where profile_id=" + Convert.ToInt32(Session["cod"]) + ")", con))
{

    SqlDataReader dr1 = cmd1.ExecuteReader();
    var yourList = new List<int>();
    if (dr1.HasRows)
    {
        while (dr1.Read())
        {
           yourList.Add(Convert.ToInt32(dr1[0]));
        }
    }
    Session["edp1"] = yourList;
    dr1.Close();
}

另外,请阅读Marc Gravell对您问题的评论。

答案 1 :(得分:3)

您可以在会话密钥下存储您喜欢的任何对象,而不仅仅是标量值。因此,只需定义一个包含您要存储的所有值的自定义类型,创建此类型的实例并将其放入会话中。