Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在更新一个会话时,不同的会话变量会改变值?_C#_Sql_Session - Fatal编程技术网

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

C# 为什么在更新一个会话时,不同的会话变量会改变值?,c#,sql,session,C#,Sql,Session,背景: ASP.NET页面上的两个按钮 按钮1: 数据被加载到数据集中。 2个会话变量,会话[“a”]和会话[“b”]被分配给数据集 按钮2: 会话[“a”]被强制转换到数据集。记录将从数据集中删除 问题: 在调用AcceptChanges()函数之前,两个会话变量都会更改以反映删除操作(Rows.Count小于1)。为什么会发生这种情况 数据集“ds”肯定不再存在了吗 protected void Button1_Click(object sender, EventArgs e)

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

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

按钮2: 会话[“a”]被强制转换到数据集。记录将从数据集中删除

问题:

在调用AcceptChanges()函数之前,两个会话变量都会更改以反映删除操作(Rows.Count小于1)。为什么会发生这种情况

数据集“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语句,只删除了第一条记录来证明这一点。

会话a和会话b在内存中保留了对数据集位置的引用。所以本质上a和b只是同一事物的两个不同名称


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

约书亚的答案是正确的。您可能需要设置Session[“b”]=ds.Copy(),因为它创建了一个新的数据集,该数据集是原始.thanx momar的副本。你的.Copy()成功了。非常感谢。