为什么在更新一个会话时,不同的会话变量会改变值?

时间:2016-04-21 14:00:33

标签: c# sql session

背景 ASP.NET页面上的两个按钮。

按钮1: 数据被加载到DataSet中。 会话变量,会话[" a"]和会话[" b"]被分配给数据集。

按钮2: 会话[" a"]被强制转换为DataSet。记录将从DataSet中删除。

问题:

在调用AcceptChanges()函数之前,会更改两个Session变量以反映删除操作(Rows.Count减少1)。为什么会这样?

当然是DataSet" ds"再也不存在了?

    protected void Button1_Click(object sender, EventArgs e)
    {

        string StringContainingSQLConnection = @"server=someserver;database=Standby;uid=StandbyUser;password=pass;";
        SqlDataAdapter adp = new SqlDataAdapter("select * from CoreData", StringContainingSQLConnection);
        DataSet ds = new DataSet();
        adp.Fill(ds);

        Session["a"] = ds;
        Session["b"] = ds;
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        DataSet ds = ((DataSet)Session["a"]);

        foreach (DataRow drw in ds.Tables[0].Rows)
        {
            drw.Delete();
            ds.AcceptChanges();
            Session["a"] = ds;
            break;
        }
    }

为了清楚起见,我删除了foreach循环中的条件IF语句,只删除了第一条记录来证明这一点。

1 个答案:

答案 0 :(得分:0)

会话a和会话b保存对内存中数据集位置的引用。所以基本上a和b只是同一个东西的两个不同名称。

https://msdn.microsoft.com/en-us/library/490f96s2.aspx

如果您希望b保持不变,则可以创建具有相同初始数据的两个数据集。将一组分配给a,将一组分配给b。