C# 为什么在更新一个会话时,不同的会话变量会改变值?
背景: ASP.NET页面上的两个按钮 按钮1: 数据被加载到数据集中。 2个会话变量,会话[“a”]和会话[“b”]被分配给数据集 按钮2: 会话[“a”]被强制转换到数据集。记录将从数据集中删除 问题: 在调用AcceptChanges()函数之前,两个会话变量都会更改以反映删除操作(Rows.Count小于1)。为什么会发生这种情况 数据集“ds”肯定不再存在了吗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)
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()成功了。非常感谢。